当前位置:网站首页>【 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】
Catalogue des articles
- 1. Réaliser la conversion entre la date et le jour ou entre l'heure et la seconde
- 2. Intervalle de calcul de la date ou de l'heure
- 3. Ajouter la date ou l'heure
- 4. Calculer le premier jour d'un mois、Dernier jour ou jour
- 5. Trouver un nom de semaine pour une date
- 6. .Trouvez les dates de n'importe quel jour ouvrable de la semaine
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()
EtSEC_TO_TIME()
Fonctions; - Réaliser la conversion entre la date et le nombre de jours ,Utiliser
TO_DAYS()
EtFROM_DAYS()
Fonctions; - Heure et date+ Conversion entre le temps et les secondes ,Utiliser
UNIX_TIMESTAMP()
OuFROM_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()
EtTIMEDIFF()
La fonction est exactement l'inverse ; - Bien que la fonction
TIMESTAMPDIFF()
Le nom de la fonction pour contientTIMESTAMP
, Mais la plage de ses paramètres n'est pasTIMESTAMP
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 :
- Deux dates (Temps) Convertir en jours ou secondes ;
- Calculer l'intervalle en utilisant les deux valeurs converties ci - dessus ;
- 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()
EtSEC_TO_TIME()
Effectuer une transition entre le temps et les secondes ; - En utilisant la fonction
TO_DAYS()
EtFROM_DAYS()
Effectuer la conversion entre la date et le nombre de jours ; - En utilisant la fonction
UNIX_TIMESTAMP()
EtFROM_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
OuTIMESTAMP
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é :
- 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; - 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::
- 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 ; - 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)
边栏推荐
- It's too convenient. You can complete the code release and approval by nailing it!
- 《2022年中國銀行業RPA供應商實力矩陣分析》研究報告正式啟動
- Alibaba cloud SLB load balancing product basic concept and purchase process
- Principle and configuration of RSTP protocol
- “百度杯”CTF比赛 九月场,Web:SQL
- How to realize batch sending when fishing
- mysql econnreset_ Nodejs socket error handling error: read econnreset
- Solve Unicode decodeerror: 'GBK' codec can't decode byte 0xa2 in position 107
- 【Hot100】34. 在排序数组中查找元素的第一个和最后一个位置
- 【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
猜你喜欢
OpenHarmony应用开发之Navigation组件详解
不知道这4种缓存模式,敢说懂缓存吗?
The "Baidu Cup" CTF competition was held in February 2017, Web: explosion-2
Hundred days to complete the open source task of the domestic database opengauss -- openguass minimalist version 3.0.0 installation tutorial
《2022年中国银行业RPA供应商实力矩阵分析》研究报告正式启动
Flutter 绘制波浪移动动画效果,曲线和折线图
碎片化知识管理工具Memos
Can and can FD
"Baidu Cup" CTF competition in September, web:upload
Detailed explanation of navigation component of openharmony application development
随机推荐
私有地址有那些
RHCSA8
Flutter 3.0更新后如何应用到小程序开发中
Can and can FD
The solution of outputting 64 bits from printf format%lld of cross platform (32bit and 64bit)
【Hot100】34. Find the first and last positions of elements in a sorted array
Solve Unicode decodeerror: 'GBK' codec can't decode byte 0xa2 in position 107
Natural language processing series (I) introduction overview
华为推送服务内容,阅读笔记
[深度学习论文笔记]UCTransNet:从transformer的通道角度重新思考U-Net中的跳跃连接
Lb10s-asemi rectifier bridge lb10s
FPGA 学习笔记:Vivado 2019.1 添加 IP MicroBlaze
ASEMI整流桥HD06参数,HD06图片,HD06应用
Overflow toolbar control in SAP ui5 view
Write macro with word
Simple page request and parsing cases
Detailed explanation of navigation component of openharmony application development
The Research Report "2022 RPA supplier strength matrix analysis of China's banking industry" was officially launched
MMSeg——Mutli-view时序数据检查与可视化
Navigation property and entityset usage in SAP segw transaction code