当前位置:网站首页>【 script secret pour l'utilisation de MySQL 】 un jeu en ligne sur l'heure et le type de date de MySQL et les fonctions d'exploitation connexes (3)

【 script secret pour l'utilisation de MySQL 】 un jeu en ligne sur l'heure et le type de date de MySQL et les fonctions d'exploitation connexes (3)

2022-07-05 13:21:00 Takingcoding4granted


Il est conseillé de lire d'abord les deux premiers posts de l'avant - propos:

1. Réaliser la conversion entre la date et le jour ou entre l'heure et la seconde

Questions

Vous souhaitez convertir la date ou l'heure en une unité de base , Par exemple, convertir la date en jours , Convertir le temps en secondes .En général, C'est très utile pour calculer la date ou l'heure .

Solutions

..La méthode de conversion dépend du type de valeur à convertir :

  • .Réaliser la transition entre le temps et le nombre de secondes ,Utiliser TIME_TO_SEC() Et SEC_TO_TIME()Fonctions;
  • Réaliser la conversion entre la date et le nombre de jours ,Utiliser TO_DAYS()Et FROM_DAYS()Fonctions;
  • Heure et date+ Conversion entre le temps et les secondes ,Utiliser UNIX_TIMESTAMP() Ou FROM_UNIXTIME() Fonctions.

Discussion

Dans la discussion qui suit, Décrit comment effectuer plusieurs dates différentes (Temps)Et les jours(Secondes)Les transitions entre.

Le temps et les secondes se convertissent

Comme indiqué ci - dessus,Peut être utilisé TIME_TO_SEC() Et SEC_TO_TIME()Fonctions.
Fonctions TIME_TO_SEC() Convertit une valeur de temps en secondes correspondantes ,Au contraire, Utilisez la fonction SEC_TO_TIME() .

mysql> SELECT t1,
    -> TIME_TO_SEC(t1) AS 'TIME to seconds',
    -> SEC_TO_TIME(TIME_TO_SEC(t1)) AS 'TIME to seconds to TIME'
    -> FROM time_val;
+----------+-----------------+-------------------------+
| t1       | TIME to seconds | TIME to seconds to TIME |
+----------+-----------------+-------------------------+
| 15:00:00 |           54000 | 15:00:00                |
| 05:01:30 |           18090 | 05:01:30                |
| 12:30:20 |           45020 | 12:30:20                |
+----------+-----------------+-------------------------+
3 rows in set (0.00 sec)

Si vous voulez convertir la valeur de temps en minutes , En heures ou en jours , La division correspondante est nécessaire :

mysql> SELECT t1,
    -> TIME_TO_SEC(t1) AS 'seconds',
    -> TIME_TO_SEC(t1)/60 AS 'minutes',
    -> TIME_TO_SEC(t1)/(60*60) AS 'hours',
    -> TIME_TO_SEC(t1)/(24*60*60) AS 'days'
    -> FROM time_val;
+----------+---------+----------+---------+--------+
| t1       | seconds | minutes  | hours   | days   |
+----------+---------+----------+---------+--------+
| 15:00:00 |   54000 | 900.0000 | 15.0000 | 0.6250 |
| 05:01:30 |   18090 | 301.5000 |  5.0250 | 0.2094 |
| 12:30:20 |   45020 | 750.3333 | 12.5056 | 0.5211 |
+----------+---------+----------+---------+--------+
3 rows in set (0.00 sec)

Si vous ne voulez pas garder la décimale , Vous pouvez alors utiliser les résultats ci - dessus FLOOR() Fonctions.

Si vous utilisez une fonction TIME_TO_SEC() Une date est passée + Valeur du format temporel , La fonction extrait la partie temps , Puis jetez la section date .En fait,, Cela peut également être considéré comme un DATETIME Ou TIMESTAMP Une autre façon d'extraire la partie temps .Par exemple:

mysql> SELECT dt,
    -> TIME_TO_SEC(dt) AS 'time part in seconds',
    -> SEC_TO_TIME(TIME_TO_SEC(dt)) AS 'time part as TIME'
    -> FROM datetime_val;
+---------------------+----------------------+-------------------+
| dt                  | time part in seconds | time part as TIME |
+---------------------+----------------------+-------------------+
| 1970-01-01 00:00:00 |                    0 | 00:00:00          |
| 1999-12-31 09:00:00 |                32400 | 09:00:00          |
| 2000-06-04 15:45:30 |                56730 | 15:45:30          |
| 2017-03-16 12:30:15 |                45015 | 12:30:15          |
+---------------------+----------------------+-------------------+
4 rows in set (0.00 sec)

Date et jour se convertissent

Comme indiqué ci - dessus, Si vous avez une valeur temporelle , Mais vous voulez le convertir en jours ,Vous pouvez utiliser TO_DAYS()Et FROM_DAYS()Fonctions.

mysql> SELECT d,
    -> TO_DAYS(d) AS 'DATE to days',
    -> FROM_DAYS(TO_DAYS(d)) AS 'DATE to days to DATE'
    -> FROM date_val;
+------------+--------------+----------------------+
| d          | DATE to days | DATE to days to DATE |
+------------+--------------+----------------------+
| 1864-02-28 |       680870 | 1864-02-28           |
| 1900-01-15 |       693975 | 1900-01-15           |
| 1999-12-31 |       730484 | 1999-12-31           |
| 2000-06-04 |       730640 | 2000-06-04           |
| 2017-03-16 |       736769 | 2017-03-16           |
+------------+--------------+----------------------+
5 rows in set (0.00 sec)

De même,,Si vous êtes TO_DAYS() Date d'entrée de la fonction +Valeur temporelle, La fonction extrait la partie Date , Et jeter la partie temps .Par exemple:

mysql> SELECT dt,
    -> TO_DAYS(dt) AS 'date part in days',
    -> FROM_DAYS(TO_DAYS(dt)) AS 'date part as DATE'
    -> FROM datetime_val;
+---------------------+-------------------+-------------------+
| dt                  | date part in days | date part as DATE |
+---------------------+-------------------+-------------------+
| 1970-01-01 00:00:00 |            719528 | 1970-01-01        |
| 1999-12-31 09:00:00 |            730484 | 1999-12-31        |
| 2000-06-04 15:45:30 |            730640 | 2000-06-04        |
| 2017-03-16 12:30:15 |            736769 | 2017-03-16        |
+---------------------+-------------------+-------------------+
4 rows in set (0.00 sec)

Date+Le temps et les secondes se convertissent

Pour DATETIME Et TIMESTAMP Valeur du type, Si les deux types de valeurs sont TIMESTAMP Dans la gamme des types,De 1970 Année 2038 Année,Alors on peut utiliser UNIX_TIMESTAMP() Et FROM_UNIXTIME() Pour réaliser la conversion entre les deux et le nombre de secondes .Par exemple:

mysql> SELECT dt,
    -> UNIX_TIMESTAMP(dt) AS seconds,
    -> FROM_UNIXTIME(UNIX_TIMESTAMP(dt)) AS timestamp
    -> FROM datetime_val;
+---------------------+------------+---------------------+
| dt                  | seconds    | timestamp           |
+---------------------+------------+---------------------+
| 1970-01-01 00:00:00 |          0 | 1970-01-01 08:00:00 |
| 1999-12-31 09:00:00 |  946602000 | 1999-12-31 09:00:00 |
| 2000-06-04 15:45:30 |  960104730 | 2000-06-04 15:45:30 |
| 2017-03-16 12:30:15 | 1489638615 | 2017-03-16 12:30:15 |
+---------------------+------------+---------------------+
4 rows in set (0.00 sec)

Fonctions UNIX_TIMESTAMP() Vous pouvez aussi DATE La valeur du type est convertie en secondes , La fonction default time part de ces dates est 00:00:00 :

mysql> SELECT
    -> CURDATE(),
    -> UNIX_TIMESTAMP(CURDATE()),
    -> FROM_UNIXTIME(UNIX_TIMESTAMP(CURDATE()));
+------------+---------------------------+------------------------------------------+
| CURDATE()  | UNIX_TIMESTAMP(CURDATE()) | FROM_UNIXTIME(UNIX_TIMESTAMP(CURDATE())) |
+------------+---------------------------+------------------------------------------+
| 2022-07-02 |                1656691200 | 2022-07-02 00:00:00                      |
+------------+---------------------------+------------------------------------------+
1 row in set (0.00 sec)

2. Intervalle de calcul de la date ou de l'heure

Questions

Vous voulez connaître l'intervalle entre deux dates ou heures .

Solutions

Pour calculer l'intervalle entre deux dates ou heures , Vous pouvez utiliser des fonctions spécialisées , Vous pouvez également commencer par la date (Temps)Convertir en jour(Secondes), Puis Calculez l'intervalle entre les deux . Quant à la fonction spécifique à utiliser , Cela dépend principalement si les deux valeurs que vous voulez calculer sont le type de date ou d'heure .

Discussion

Plusieurs méthodes de calcul des dates sont décrites ci - dessous. (Temps) Mode d'espacement .

Date d'utilisation(Temps)Intervalle de calcul de la fonction

Nombre de jours pour lesquels vous souhaitez calculer l'intervalle entre deux valeurs de date ,Peut être utilisé DATEDIFF() Fonctions:

mysql> SET @d1 = '2022-01-01', @d2 = '2021-12-01';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT DATEDIFF(@d1, @d2) AS 'd1 - d2', DATEDIFF(@d2, @d1) AS 'd2 - d1';
+---------+---------+
| d1 - d2 | d2 - d1 |
+---------+---------+
|      31 |     -31 |
+---------+---------+
1 row in set (0.00 sec)

Fonctions DATEDIFF() Il en va de même pour les deux dates + Valeur du type de temps , Mais la partie temps est ignorée dans le calcul .Donc,, Cette fonction s'applique à deux DATE ,DATETIME Ou TIMESTAMP Calcul du nombre de jours d'intervalle entre les valeurs du type .

Vous voulez calculer l'intervalle entre deux valeurs de temps ,Peut être utilisé TIMEDIFF() Fonctions:

mysql> SET @t1 = '12:00:00', @t2 = '16:30:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT TIMEDIFF(@t1, @t2) AS 't1 - t2', TIMEDIFF(@t2, @t1) AS 't2 - t1';
+------------------+-----------------+
| t1 - t2          | t2 - t1         |
+------------------+-----------------+
| -04:30:00.000000 | 04:30:00.000000 |
+------------------+-----------------+
1 row in set (0.00 sec)

Fonctions TIMEDIFF() Il en va de même pour les deux dates + Valeur du type de temps .
L'intervalle entre deux valeurs de temps peut être exprimé comme un TIME Valeur du type, Ce dernier peut à son tour être utilisé HOUR() ,MINUTE() Et SECOND() Fonction pour diviser .Par exemple:

mysql> SELECT t1, t2,
    -> TIMEDIFF(t2, t1) AS 't2 - t1 as TIME',
    -> IF(TIMEDIFF(t2, t1) >= 0,'+','-') AS sign,
    -> HOUR(TIMEDIFF(t2, t1)) AS hour,
    -> MINUTE(TIMEDIFF(t2, t1)) AS minute,
    -> SECOND(TIMEDIFF(t2, t1)) AS second
    -> FROM time_val;
+----------+----------+-----------------+------+------+--------+--------+
| t1       | t2       | t2 - t1 as TIME | sign | hour | minute | second |
+----------+----------+-----------------+------+------+--------+--------+
| 15:00:00 | 15:00:00 | 00:00:00        | +    |    0 |      0 |      0 |
| 05:01:30 | 02:30:20 | -02:31:10       | -    |    2 |     31 |     10 |
| 12:30:20 | 17:30:45 | 05:00:25        | +    |    5 |      0 |     25 |
+----------+----------+-----------------+------+------+--------+--------+
3 rows in set (0.00 sec)

Si vous souhaitez calculer deux dates ou plus + Intervalle entre les valeurs de temps ,Peut également être utilisé TIMESTAMPDIFF() Fonctions. Cette fonction est flexible , Vous pouvez spécifier l'unit é d'intervalle souhaitée .Par exemple:

mysql> SET @dt1 = '1900-01-01 00:00:00', @dt2 = '1910-01-01 00:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT
    -> TIMESTAMPDIFF(MINUTE, @dt1, @dt2) AS minutes,
    -> TIMESTAMPDIFF(HOUR, @dt1, @dt2) AS hours,
    -> TIMESTAMPDIFF(DAY, @dt1, @dt2) AS days,
    -> TIMESTAMPDIFF(WEEK, @dt1, @dt2) AS weeks,
    -> TIMESTAMPDIFF(YEAR, @dt1, @dt2) AS years;
+---------+-------+------+-------+-------+
| minutes | hours | days | weeks | years |
+---------+-------+------+-------+-------+
| 5258880 | 87648 | 3652 |   521 |    10 |
+---------+-------+------+-------+-------+
1 row in set (0.00 sec)

En fait,,Fonctions TIMESTAMPDIFF() En plus de supporter les unités d'espacement ci - dessus ,Il soutient également MICROSECOND ,MONTH ,QUARTER .En outre,Fonctions TIMESTAMP() Peut être utilisé pour calculer facilement l'âge d'une personne .

Pour les fonctions TIMESTAMPDIFF() , Deux points méritent une attention particulière :

  • Si la première date (Temps)La valeur est supérieure à la deuxième, Le résultat sera négatif ,Ceci et DATEDIFF() Et TIMEDIFF() La fonction est exactement l'inverse ;
  • Bien que la fonction TIMESTAMPDIFF() Le nom de la fonction pour contient TIMESTAMP , Mais la plage de ses paramètres n'est pas TIMESTAMP Limites de la plage de valeurs de type .

Calculer l'intervalle en unités de base

Calculer deux dates (Temps) Une autre façon d'espacer est d'utiliser : Unités de base en secondes et jours :

  1. Deux dates (Temps) Convertir en jours ou secondes ;
  2. Calculer l'intervalle en utilisant les deux valeurs converties ci - dessus ;
  3. Renvoie le résultat calculé en jours - secondes à la date ou à l'heure .

Selon la date ou l'heure à laquelle vous voulez calculer l'intervalle , Différentes fonctions de transformation sont nécessaires :

  • En utilisant la fonction TIME_TO_SEC() Et SEC_TO_TIME() Effectuer une transition entre le temps et les secondes ;
  • En utilisant la fonction TO_DAYS() Et FROM_DAYS() Effectuer la conversion entre la date et le nombre de jours ;
  • En utilisant la fonction UNIX_TIMESTAMP() Et FROM_UNIXTIME() Date d'exécution + La transition entre le temps et les secondes .
Calculer l'intervalle de temps en secondes
mysql> SELECT t1, t2,
    -> TIME_TO_SEC(t2) - TIME_TO_SEC(t1) AS 't2 - t1 (in seconds)',
    -> SEC_TO_TIME(TIME_TO_SEC(t2) - TIME_TO_SEC(t1)) AS 't2 - t1 (as TIME)'
    -> FROM time_val;
+----------+----------+----------------------+-------------------+
| t1       | t2       | t2 - t1 (in seconds) | t2 - t1 (as TIME) |
+----------+----------+----------------------+-------------------+
| 15:00:00 | 15:00:00 |                    0 | 00:00:00          |
| 05:01:30 | 02:30:20 |                -9070 | -02:31:10         |
| 12:30:20 | 17:30:45 |                18025 | 05:00:25          |
+----------+----------+----------------------+-------------------+
3 rows in set (0.00 sec)
Utilisez les unités de base pour calculer deux dates ou dates+Intervalle de temps

Lorsque vous souhaitez convertir d'abord deux dates en unités de base communes par rapport au même point de référence , Et en calculant l'intervalle entre les deux , La plage de valeurs de la date détermine les unités de conversion disponibles :

  • De 1970-01-01 00:00:00 UTC En arrière. DATE ,DATETIME Ou TIMESTAMP Type, Vous pouvez d'abord convertir les valeurs de ces types en secondes , Pour obtenir une précision d'intervalle précise au niveau de la seconde ;
  • Pour le début de la mise en œuvre du calendrier grégorien, c'est - à - dire 1582 Année à 1970-01-01 00:00:00 UTC Date, Vous pouvez d'abord convertir les dates en secondes , Pour obtenir une précision d'intervalle exacte au niveau du jour ;
  • Pour les dates antérieures , Convertir d'abord la date en unités de base , Ensuite, il est plus difficile de calculer l'intervalle .En ce moment, Besoin d'un langage de programmation API ,Parce que l'utilisation SQL Les déclarations peuvent être difficiles ou impossibles à enraciner .

Pour calculer deux dates ou dates + Nombre de jours entre les valeurs de temps ,Peut être utilisé en premier TO_DAYS() La fonction convertit en jours , Puis Calculez l'intervalle en jours . Si vous voulez un intervalle hebdomadaire entre les deux , Vous pouvez diviser le résultat par sept :

mysql> SET @days = TO_DAYS('1884-01-01') - TO_DAYS('1883-06-05');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @days AS days, @days/7 AS weeks;
+------+---------+
| days | weeks   |
+------+---------+
|  210 | 30.0000 |
+------+---------+
1 row in set (0.00 sec)

Il est important de noter que, Vous ne pouvez pas convertir des jours en mois ou en années directement de la même façon , Parce que ces deux - là ont des longueurs différentes . Si vous voulez obtenir un tel effet , Besoin d'utiliser TIMESTAMPDIFF() Fonctions.

Pour TIMESTAMP Dans la gamme de types,Entre 1970 à 2038 Dates entre les années+Valeur temporelle,Vous pouvez utiliser UNIX_TIMESTAMP() Fonction pour implémenter deux de ces dates + Intervalle de temps précis en secondes entre les valeurs de temps . Pour obtenir l'intervalle dans d'autres unités , Vous pouvez facilement convertir des secondes en minutes ,Heures, Nombre de jours ou de semaines .Par exemple:

mysql> SET @dt1 = '1984-01-01 09:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SET @dt2 = @dt1 + INTERVAL 14 DAY;
Query OK, 0 rows affected (0.00 sec)

mysql> SET @interval = UNIX_TIMESTAMP(@dt2) - UNIX_TIMESTAMP(@dt1);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @interval AS seconds,
    -> FLOOR(@interval / 60) AS minutes,
    -> FLOOR(@interval / (60 * 60)) AS hours,
    -> FLOOR(@interval / (24 * 60 * 60)) AS days,
    -> FLOOR(@interval / (7 * 24 * 60 * 60)) AS weeks;
+---------+---------+-------+------+-------+
| seconds | minutes | hours | days | weeks |
+---------+---------+-------+------+-------+
| 1209600 |   20160 |   336 |   14 |     2 |
+---------+---------+-------+------+-------+
1 row in set (0.00 sec)

Pour TIMESTAMP Valeurs en dehors de la plage que le type peut représenter , Parce qu'il ne peut pas être utilisé comme ci - dessus UNIX_TIMESTAMP() Fonctions, Donc deux dates sont calculées + Le calcul de l'intervalle entre les valeurs du type de temps est un peu plus compliqué :

  1. Utilisez d'abord TO_DAYS() La fonction calcule le nombre de jours où la partie de la date des deux diffère ,Et multipliez par 24 × 60 × 60 Obtenez le nombre de secondes;
  2. Ensuite, utilisez TIME_TO_SEC() La fonction calcule le nombre de secondes entre les deux parties du temps .
mysql> SET @dt1 = '1800-02-14 07:30:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SET @dt2 = '1800-02-17 06:30:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SET @interval =
    -> ((TO_DAYS(@dt2) - TO_DAYS(@dt1)) * 24*60*60)
    -> + TIME_TO_SEC(@dt2) - TIME_TO_SEC(@dt1);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @interval AS seconds, SEC_TO_TIME(@interval) AS TIME;
+---------+----------+
| seconds | TIME     |
+---------+----------+
|  255600 | 71:00:00 |
+---------+----------+
1 row in set (0.00 sec)

3. Ajouter la date ou l'heure

Questions

Vous souhaitez ajouter la date ou l'heure de mise en œuvre .Par exemple, Vous voulez ajouter un nombre donné de secondes à une valeur temporelle , Ou vous voulez fixer une date pour les trois prochaines semaines à partir d'aujourd'hui .

Solutions

Ajouter la date ou l'heure de mise en oeuvre , Vous avez plusieurs options :

  • Utiliser des fonctions dédiées ;
  • Utiliser + INTERVAL Ou - INTERVAL Opérateur;
  • Convertir d'abord la valeur correspondante en unités de base , Puis additionnez .

Il est important de noter que, La fonction ou l'opérateur spécifique applicable dépend du type de valeur de date ou d'heure .

Discussion

Ajouter la date ou l'heure en utilisant une fonction ou un opérateur dédié

Vous voulez ajouter une valeur de type temps à une autre valeur de type temps ou date + Sur la valeur du type de temps ,Peut être utilisé ADDTIME() Fonctions:

mysql> SELECT ADDTIME(@t1, @t2);
+-------------------+
| ADDTIME(@t1, @t2) |
+-------------------+
| 27:30:00          |
+-------------------+
1 row in set (0.00 sec)

mysql> SET @dt = '1984-03-01 12:00:00', @t = '12:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT ADDTIME(@dt, @t);
+---------------------+
| ADDTIME(@dt, @t)    |
+---------------------+
| 1984-03-02 00:00:00 |
+---------------------+
1 row in set (0.00 sec)

Vous voulez ajouter une valeur de type temps à une autre valeur de type date ou date + Sur la valeur du type de temps ,Peut être utilisé TIMESTAMP() Fonctions:

mysql> SET @d = '1984-03-01', @t = '15:30:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT TIMESTAMP(@d, @t);
+----------------------------+
| TIMESTAMP(@d, @t)          |
+----------------------------+
| 1984-03-01 15:30:00.000000 |
+----------------------------+
1 row in set (0.00 sec)

mysql> SET @dt = '1984-03-01 12:00:00', @t = '12:00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT TIMESTAMP(@dt, @t);
+----------------------------+
| TIMESTAMP(@dt, @t)         |
+----------------------------+
| 1984-03-02 00:00:00.000000 |
+----------------------------+
1 row in set (0.00 sec)

MySQL Sont également disponibles DATE_ADD() Et DATE_SUB() Deux fonctions, Ces deux fonctions peuvent être utilisées pour ajouter une période à une date , Ou soustraire une période d'une date . Chaque fonction accepte une date ou une date + Valeur du type de temps d Et une période comme paramètre , C'est - à - dire que la syntaxe d'utilisation de la fonction est la suivante :

DATE_ADD(d, INTERVAL val unit)
DATE_SUB(d, INTERVAL val unit)

Opérateur + INTERVAL Et - INTERVAL Des fonctions similaires peuvent être réalisées :

d + INTERVAL val unit
d - INTERVAL val unit

Parmi eux _unit_ Est l'unit é d'intervalle de temps ,Et val Est le nombre d'intervalles de temps . Les unités communes sont SECOND ,MINUTE ,HOUR ,DAY ,MONTH Et YEAR .

  • Obtenez une date pour trois jours à partir d'aujourd'hui :
mysql> SELECT CURDATE(), DATE_ADD(CURDATE(), INTERVAL 3 DAY);
+------------+-------------------------------------+
| CURDATE()  | DATE_ADD(CURDATE(), INTERVAL 3 DAY) |
+------------+-------------------------------------+
| 2022-07-03 | 2022-07-06                          |
+------------+-------------------------------------+
1 row in set (0.00 sec)
  • Obtenez une date pour la semaine à partir d'aujourd'hui :
mysql> SELECT CURDATE(), DATE_SUB(CURDATE(), INTERVAL 1 WEEK);
+------------+--------------------------------------+
| CURDATE()  | DATE_SUB(CURDATE(), INTERVAL 1 WEEK) |
+------------+--------------------------------------+
| 2022-07-03 | 2022-06-26                           |
+------------+--------------------------------------+
1 row in set (0.00 sec)
  • À partir de maintenant 60 Date et heure de l'heure :
mysql> SELECT NOW(), DATE_ADD(NOW(), INTERVAL 60 HOUR);
+---------------------+-----------------------------------+
| NOW()               | DATE_ADD(NOW(), INTERVAL 60 HOUR) |
+---------------------+-----------------------------------+
| 2022-07-03 00:27:09 | 2022-07-05 12:27:09               |
+---------------------+-----------------------------------+
1 row in set (0.00 sec)
  • À partir de maintenant 14.5 Date et heure de l'heure :
mysql> SELECT NOW(), DATE_ADD(NOW(), INTERVAL '14:30' HOUR_MINUTE);
+---------------------+-----------------------------------------------+
| NOW()               | DATE_ADD(NOW(), INTERVAL '14:30' HOUR_MINUTE) |
+---------------------+-----------------------------------------------+
| 2022-07-03 00:28:47 | 2022-07-03 14:58:47                           |
+---------------------+-----------------------------------------------+
1 row in set (0.00 sec)
  • À partir de maintenant 3 Oh, mon Dieu. 4 Date et heure de l'heure :
mysql> SELECT NOW(), DATE_ADD(NOW(), INTERVAL '3 4' DAY_HOUR);
+---------------------+------------------------------------------+
| NOW()               | DATE_ADD(NOW(), INTERVAL '3 4' DAY_HOUR) |
+---------------------+------------------------------------------+
| 2022-07-03 00:30:14 | 2022-07-06 04:30:14                      |
+---------------------+------------------------------------------+
1 row in set (0.00 sec)

En fait,,Fonctions DATE_ADD() Et DATE_SUB() Est interchangeable ,Par exemple, Les deux expressions suivantes sont en fait équivalentes :

DATE_ADD(d, INTERVAL -3 MONTH)
DATE_SUB(d, INTERVAL 3 MONTH)

De même,, En plus d'utiliser des fonctions DATE_ADD() Et DATE_SUB() , Vous pouvez également utiliser l'opérateur + INTERVAL Et - INTERVAL Réaliser la même fonctionnalité:

mysql> SELECT CURDATE(), CURDATE() + INTERVAL 1 YEAR;
+------------+-----------------------------+
| CURDATE()  | CURDATE() + INTERVAL 1 YEAR |
+------------+-----------------------------+
| 2022-07-03 | 2023-07-03                  |
+------------+-----------------------------+
1 row in set (0.00 sec)

mysql> SELECT NOW(), NOW() - INTERVAL '1 12' DAY_HOUR;
+---------------------+----------------------------------+
| NOW()               | NOW() - INTERVAL '1 12' DAY_HOUR |
+---------------------+----------------------------------+
| 2022-07-03 00:36:58 | 2022-07-01 12:36:58              |
+---------------------+----------------------------------+
1 row in set (0.00 sec)

Fonctions TIMESTAMPADD() Il est également possible d'ajouter une période de temps à une date ou une date + Sur la valeur du temps , Il utilise également la syntaxe et la fonction DATE_ADD() C'est assez similaire:

TIMESTAMPADD(unit,interval,d) = DATE_ADD(d,INTERVAL interval unit)

4. Calculer le premier jour d'un mois、Dernier jour ou jour

Questions

Donnez une date, Vous voulez déterminer la date du premier ou du dernier jour du mois au cours duquel la date se trouve , Ou ce mois - là n La date du premier ou dernier jour du mois suivant le mois , Et combien de jours dans un mois .

Solutions

Pour obtenir la valeur de la date le premier jour du mois au cours duquel une date se trouve , Besoin d'utiliser le calcul de la traduction de la date d'utilisation . Afin d'obtenir la valeur de la date du dernier jour du mois où une date se trouve ,Peut être utilisé directement LAST_DAY() Fonctions. Pour obtenir le nombre de jours d'un mois , Vous pouvez d'abord obtenir la valeur de date du dernier jour du mois ,Et l'utiliser DAYOFMONTH() Fonction.

Discussion

Parfois..., Vous pouvez avoir une date de référence , Et vous voulez une date cible , Mais il n'y a pas de relation relative fixe entre les deux .Par exemple, Le nombre de jours entre la date actuelle et le premier et dernier jour du mois n'est pas un nombre fixe de jours .

Pour obtenir la date du premier jour du mois au cours duquel la valeur de date donnée se trouve , Vous pouvez déplacer une date donnée vers l'avant par rapport à DAYOFMONTH() Moins. 1 Le nombre de jours:

mysql> SELECT d, DATE_SUB(d, INTERVAL DAYOFMONTH(d) - 1 DAY) AS '1st of month'
    -> FROM date_val;
+------------+--------------+
| d          | 1st of month |
+------------+--------------+
| 1864-02-28 | 1864-02-01   |
| 1900-01-15 | 1900-01-01   |
| 1999-12-31 | 1999-12-01   |
| 2000-06-04 | 2000-06-01   |
| 2017-03-16 | 2017-03-01   |
+------------+--------------+
5 rows in set (0.00 sec)

Plus généralement, Si vous voulez une date donnée n Valeur de la date le premier jour du mois où la date après le mois est ,Vous pouvez utiliser ce qui suit SQL Déclarations:

DATE_ADD(DATE_SUB(d,INTERVAL DAYOFMONTH(d)-1 DAY),INTERVAL n MONTH)

Par exemple, Pour une date donnée , Pour déterminer la date du premier jour du mois précédant et du mois suivant cette date ,Vous pouvez utiliser ce qui suit SQL Déclarations:

mysql> SELECT d,
    -> DATE_ADD(DATE_SUB(d, INTERVAL DAYOFMONTH(d) - 1 DAY), INTERVAL -1 MONTH)
    ->     AS '1st of previous month',
    -> DATE_ADD(DATE_SUB(d, INTERVAL DAYOFMONTH(d) - 1 DAY), INTERVAL 1 MONTH)
    ->     AS '1st of following month'
    -> FROM date_val;
+------------+-----------------------+------------------------+
| d          | 1st of previous month | 1st of following month |
+------------+-----------------------+------------------------+
| 1864-02-28 | 1864-01-01            | 1864-03-01             |
| 1900-01-15 | 1899-12-01            | 1900-02-01             |
| 1999-12-31 | 1999-11-01            | 2000-01-01             |
| 2000-06-04 | 2000-05-01            | 2000-07-01             |
| 2017-03-16 | 2017-02-01            | 2017-04-01             |
+------------+-----------------------+------------------------+
5 rows in set (0.00 sec)

Il est relativement facile d'obtenir la date du dernier jour du mois où une date donnée se trouve , Parce que les fonctions peuvent être utilisées directement LAST_DAY()

mysql> SELECT d, LAST_DAY(d) AS 'last of month'
    -> FROM date_val;
+------------+---------------+
| d          | last of month |
+------------+---------------+
| 1864-02-28 | 1864-02-29    |
| 1900-01-15 | 1900-01-31    |
| 1999-12-31 | 1999-12-31    |
| 2000-06-04 | 2000-06-30    |
| 2017-03-16 | 2017-03-31    |
+------------+---------------+
5 rows in set (0.00 sec)

De même,,Plus généralement, Si vous voulez une date donnée n Valeur de la date le dernier jour du mois au cours duquel la date après le mois est ,Vous pouvez utiliser ce qui suit SQL Déclarations:

LAST_DAY(DATE_ADD(d, INTERVAL n MONTH))

Par exemple, Pour une date donnée , Pour obtenir la date du dernier jour du mois où se trouve la date un mois avant et un mois après cette date ,Vous pouvez utiliser ce qui suit SQL Déclarations:

mysql> SELECT d,
    -> LAST_DAY(DATE_ADD(d, INTERVAL -1 MONTH))
    ->     AS 'last of previous month',
    -> LAST_DAY(DATE_ADD(d, INTERVAL 1 MONTH))
    ->     AS 'last of following month'
    -> FROM date_val;
+------------+------------------------+-------------------------+
| d          | last of previous month | last of following month |
+------------+------------------------+-------------------------+
| 1864-02-28 | 1864-01-31             | 1864-03-31              |
| 1900-01-15 | 1899-12-31             | 1900-02-28              |
| 1999-12-31 | 1999-11-30             | 2000-01-31              |
| 2000-06-04 | 2000-05-31             | 2000-07-31              |
| 2017-03-16 | 2017-02-28             | 2017-04-30              |
+------------+------------------------+-------------------------+
5 rows in set (0.00 sec)

Pour obtenir le nombre de jours d'un mois ,Peut être utilisé en premier LAST_DAY() Fonctions,Ensuite, utilisez - le. DAYOFMONTH() Fonctions:

mysql> SELECT d, DAYOFMONTH(LAST_DAY(d)) AS 'days in month' FROM date_val;
+------------+---------------+
| d          | days in month |
+------------+---------------+
| 1864-02-28 |            29 |
| 1900-01-15 |            31 |
| 1999-12-31 |            31 |
| 2000-06-04 |            30 |
| 2017-03-16 |            31 |
+------------+---------------+
5 rows in set (0.00 sec)

5. Trouver un nom de semaine pour une date

Questions

Vous voulez connaître le nom de la semaine pour une date donnée .

Solutions

Utiliser DAYNAME() Fonctions.

Discussion

Pour connaître le nom de la semaine correspondant à une date donnée ,Peut être utilisé DAYNAME() Fonctions:

mysql> SELECT CURDATE(), DAYNAME(CURDATE());
+------------+--------------------+
| CURDATE()  | DAYNAME(CURDATE()) |
+------------+--------------------+
| 2022-07-03 | Sunday             |
+------------+--------------------+
1 row in set (0.00 sec)

DAYNAME() Les fonctions sont généralement utilisées en conjonction avec d'autres opérations liées à la date .Par exemple, Pour déterminer le nom de la semaine le premier jour d'un mois , Peut combiner des fonctions DAYOFMONTH()

mysql> SET @d = CURDATE();
Query OK, 0 rows affected (0.00 sec)

mysql> SET @first = DATE_SUB(@d, INTERVAL DAYOFMONTH(@d) - 1 DAY);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @d AS 'starting date',
    -> @first AS '1st of month date',
    -> DAYNAME(@first) AS '1st of month day';
+---------------+-------------------+------------------+
| starting date | 1st of month date | 1st of month day |
+---------------+-------------------+------------------+
| 2022-07-03    | 2022-07-01        | Friday           |
+---------------+-------------------+------------------+
1 row in set (0.00 sec)

6. .Trouvez les dates de n'importe quel jour ouvrable de la semaine

Questions

Vous devez calculer la date correspondant à un jour ouvrable de la semaine au cours de laquelle la date donnée se trouve . Supposons que vous vouliez savoir et 2014-07-09 Le jour correspondant au mardi de la même semaine .

Solutions

Voir la section discussion ci - dessous .

Discussion

En raison de la date donnée 2014-07-09 , Vous voulez connaître la date qui correspond au mardi de la même semaine , Tu dois d'abord savoir 2014-07-09 Le nombre de semaines correspondant à cette date .Par exemple,Si 2014-07-09 Correspondant à lundi , Donc la date qui correspond au mardi de la même semaine que la date est la date qui est reportée d'un jour ,C'est - à - dire: 2014-07-10 ;Si 2014-07-09 Correspondant à mercredi , Donc la date correspondant au mardi de la même semaine que la date est un jour avant la date ,C'est - à - dire: 2014-07-08 .

Pour les besoins ci - dessus,MySQL Deux fonctions utiles sont fournies .Fonctions DAYOFWEEK() Considérez le dimanche comme le premier jour de la semaine , Le samedi est considéré comme le dernier jour de la semaine , Et les chiffres correspondants du dimanche au samedi 1 1 1 À 7 7 7 ;Fonctions WEEKDAY() Considérez lundi comme le premier jour de la semaine , Et les chiffres correspondants du lundi au dimanche 0 0 0 À 6 6 6 .

Avec les fonctions ci - dessus, La solution des problèmes ci - dessus peut donc suivre cette ligne de pensée ,C'est - à - dire::

  1. Tout d'abord,, Déplacer la date donnée vers l'avant DAYOFWEEK() Oh, mon Dieu., Cette étape donne une date , Et cette date est toujours le samedi de la semaine précédant la semaine au cours de laquelle la date est donnée ;
  2. Et voilà.,De 1 1 1 La date de l'étape est reportée d'un jour pour obtenir la date du dimanche , Deux jours en arrière pour obtenir la date du lundi ,Par analogie.

Les étapes ci - dessus correspondent à SQL L'énoncé est le suivant:

DATE_ADD(DATE_SUB(d, INTERVAL DAYOFWEEK(d) DAY), INTERVAL n DAY)

Parmi eux d Représente une date donnée , n n n La plage de valeurs de est de 1 1 1 À 7 7 7, Disponible séparément et date d Du dimanche au samedi de la même semaine .En fait,, L'expression ci - dessus peut également être simplifiée comme suit :

Pour date_val Enregistrements dans le tableau, Vous pouvez obtenir les dimanches et samedis de la même semaine que les dates ( Ici, le dimanche est le premier jour de la semaine , Le dernier jour de samedi ) Les dates correspondantes sont les suivantes :

mysql> SELECT d, DAYNAME(d) AS day,
    -> DATE_ADD(d, INTERVAL 1 - DAYOFWEEK(d) DAY) AS Sunday,
    -> DATE_ADD(d, INTERVAL 7 - DAYOFWEEK(d) DAY) AS Saturday
    -> FROM date_val;
+------------+----------+------------+------------+
| d          | day      | Sunday     | Saturday   |
+------------+----------+------------+------------+
| 1864-02-28 | Sunday   | 1864-02-28 | 1864-03-05 |
| 1900-01-15 | Monday   | 1900-01-14 | 1900-01-20 |
| 1999-12-31 | Friday   | 1999-12-26 | 2000-01-01 |
| 2000-06-04 | Sunday   | 2000-06-04 | 2000-06-10 |
| 2017-03-16 | Thursday | 2017-03-12 | 2017-03-18 |
+------------+----------+------------+------------+
5 rows in set (0.00 sec)
原网站

版权声明
本文为[Takingcoding4granted]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207051317471951.html