Maison  >  Article  >  base de données  >  Quel type est utilisé pour les anniversaires dans MySQL ?

Quel type est utilisé pour les anniversaires dans MySQL ?

青灯夜游
青灯夜游original
2022-11-11 15:57:268370parcourir

Types d'anniversaires disponibles dans MySQL : 1. Type DATE, le format de date qui peut être représenté est "AAAA-MM-JJ", qui nécessite 3 octets pour le stockage 2. Type DATETIME, le format de date qui peut être représenté est ; "AAAA-MM-JJ HH:MM:SS", qui nécessite 8 octets pour le stockage ; 3. Type TIMESTAMP, le format de date représentable est "AAAA-MM-JJ HH:MM:SS", qui nécessite 4 octets pour le stockage Festival. .

Quel type est utilisé pour les anniversaires dans MySQL ?

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3. "Types de date et d'heure adaptés aux anniversaires dans MySQL" DD

1000- 01-01 ~ 9999-12-33 octets

DATETIMEAAAA-MM-JJ HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23 : 59:598 bytesTIMESTAMPAAAA-MM-JJ HH:MM:SS1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14 :07 UTC4 octets

Type DATE

Le type DATE est utilisé lorsqu'une seule valeur de date est nécessaire, sans la partie heure, et nécessite 3 octets pour le stockage. Le format de date est « AAAA-MM-JJ », où AAAA représente l'année, MM représente le mois et JJ représente le jour.

Lors de l'attribution de valeurs aux champs de type DATE, vous pouvez utiliser des données de type chaîne ou de type numérique à insérer, à condition qu'elles soient conformes au format de date de DATE. Comme indiqué ci-dessous :

  • La date exprimée au format de caractères « AAAA-MM-JJ » ou « AAAAMMJJ », la plage de valeurs est « 1000-01-01 » ~ « 9999-12-3 ». Par exemple, saisissez « 2015-12-31 » ou « 20151231 » et la date insérée dans la base de données sera le 2015-12-31.

  • Représente la date au format de chaîne « AA-MM-JJ » ou « AAMMJJ », où AA représente la valeur de l'année à deux chiffres. MySQL interprète les règles pour les valeurs d'année à deux chiffres : les valeurs d'année comprises entre « 00 et 69 » sont converties en « 2000 ~ 2069 », et les valeurs d'année comprises entre « 70 et 99 » sont converties en "1970 ~ 1999". Par exemple, si vous saisissez « 15-12-31 », la date insérée dans la base de données est le 2015-12-31 ; si vous saisissez « 991231 », la date insérée dans la base de données est le 1999-12-31.

  • Date exprimée au format numérique AAMMJJ, similaire au précédent, les valeurs de l'année comprises entre 00 et 69 sont converties en 2000 à 2069 et les valeurs de l'année comprises entre 80 et 99 sont converties en 1980 ~ 1999. Par exemple, si vous saisissez 151231, la date insérée dans la base de données est le 31/12/2015, et si vous saisissez 991231, la date insérée dans la base de données est le 31/12/1999.

  • Utilisez CURRENT_DATE ou NOW() pour insérer la date actuelle du système.

Astuce : MySQL autorise une syntaxe "détendue" : n'importe quel signe de ponctuation peut être utilisé comme séparateur entre les parties de date. Par exemple, '98-11-31', '98.11.31', '98/11/31' et '98@11@31' sont équivalents et ces valeurs seront insérées correctement dans la base de données.

Type DATETIME

Le type DATETIME est utilisé pour les valeurs qui doivent contenir à la fois des informations de date et d'heure et nécessite 8 octets pour le stockage. Le format de date est « AAAA-MM-JJ HH:MM:SS », où AAAA représente l'année, MM représente le mois, DD représente le jour, HH représente l'heure, MM représente la minute et SS représente la seconde.

Lors de l'attribution de valeurs aux champs de type DATETIME, vous pouvez utiliser des données de type chaîne ou de type numérique à insérer, à condition qu'elles soient conformes au format de date de DATETIME, comme indiqué ci-dessous :

  • Utilisez 'AAAA-MM -JJ HH:MM :SS' ou 'AAAAMMJJHHMMSS' La date représentée au format chaîne, la plage de valeurs est '1000-01-01 00:00:00' ~ '9999-12-3 23:59:59'. Par exemple, si vous saisissez « 2014-12-31 05:05:05 » ou « 20141231050505 », la valeur DATETIME insérée dans la base de données sera 2014-12-31 05:05:05.

  • Une date représentée au format de chaîne « AA-MM-JJ HH:MM:SS » ou « AAMMJJHHMMSS », où AA représente la valeur de l'année à deux chiffres. Comme auparavant, la valeur de l'année dans la plage de « 00 à 79 » est convertie en « 2000 à 2079 », et la valeur de l'année dans la plage de « 80 à 99 » est convertie en « 1980 à 1999 ». Par exemple, si vous saisissez « 14-12-31 05:05:05 », le DATETIME inséré dans la base de données est 2014-12-31 05:05:05 ; si vous saisissez 141231050505, le DATETIME inséré dans la base de données est 2014 ; -12-31 05:05:05 .

  • Date et heure exprimées au format numérique AAAAMMJJHHMMSS ou AAMMJJHHMMSS. Par exemple, si vous entrez 20141231050505, le DATETIME inséré dans la base de données est 2014-12-31 05:05:05 ; si vous entrez 140505050505, le DATETIME inséré dans la base de données est 2014-12-31 05:05:05.

Astuce : MySQL autorise une syntaxe "détendue" : n'importe quel signe de ponctuation peut être utilisé comme séparateur entre les parties de date ou les parties d'heure. Par exemple, '98-12-31 11:30:45', '98.12.31 11+30+35', '98/12/31 11*30*45' et '98@12@31 11^30^ 45' sont équivalents et ces valeurs peuvent être insérées correctement dans la base de données.

Type TIMESTAMP

Le format d'affichage de TIMESTAMP est le même que DATETIME, la largeur d'affichage est fixée à 19 caractères, le format de date est AAAA-MM-JJ HH:MM:SS, ce qui nécessite 4 octets pour le stockage. Toutefois, la plage de valeurs de la colonne TIMESTAMP est plus petite que la plage de valeurs de DATETIME, qui est « 1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC. Lors de l'insertion de données, assurez-vous qu'elles se situent dans la plage de valeurs légales.

Conseils : Le temps universel coordonné (anglais : temps universel coordonné, français : Temps Universel Coordonné) est également connu sous le nom de temps universel unifié, de temps standard universel et de temps international coordonné. Les abréviations anglaise (CUT) et française (TUC) sont différentes et, à titre de compromis, l'abréviation est UTC.

TIMESTAMP et DATETIME, en plus des différents octets de stockage et plages prises en charge, la plus grande différence est :

  • DATETIME Lors du stockage des données de date, elles sont stockées dans le format d'entrée réel, c'est-à-dire quelle que soit l'entrée qui est stockée. Cela n'a rien à voir avec le fuseau horaire ;

  • Le stockage de la valeur TIMESTAMP est enregistré au format UTC (Temps universel coordonné). Le fuseau horaire actuel est converti lors du stockage, puis reconverti dans le fuseau horaire actuel lors de la récupération. Autrement dit, lors de l'interrogation, la valeur temporelle affichée est différente en fonction du fuseau horaire actuel.

Conseil : Si vous attribuez une valeur DATE à un objet DATETIME ou TIMESTAMP, la partie heure de la valeur résultante est définie sur « 00:00:00 », donc la valeur DATE ne contient pas d'informations temporelles. Si un objet DATE se voit attribuer une valeur DATETIME ou TIMESTAMP, la partie heure de la valeur résultante est supprimée, de sorte que la valeur DATE ne contient aucune information temporelle.

Fonctions d'heure et de date

  • Fonctions d'heure système now(), current_timestamp, sysdate()

Ces trois fonctions peuvent renvoyer l'heure du système, voir leurs différences, et en même temps temps Les résultats obtenus en accédant à ces trois fonctions sont les mêmes, mais après quelques secondes d'attente, les résultats sont différents.

Quel type est utilisé pour les anniversaires dans MySQL ?

La figure ci-dessus montre que l'heure renvoyée par sysdate() est différente de now(), current_timestamp, qui est 2 secondes plus lente. Les raisons sont les suivantes :

current_timestamp est un synonyme de now, et les deux. sont en fait les mêmes ;

sysdate( ) La fonction renvoie l'heure à laquelle la fonction actuelle est exécutée, tandis que now() renvoie l'heure à laquelle l'instruction SQL est exécutée

  • fonction d'addition et de soustraction de temps

 ;

① date_add et date_sub

date_add(date, intervalle expr unit) et date_sub(date, intervalle expr unit) représentent respectivement une augmentation et une diminution.

select
date_add('2017-12-18 22:51:00', interval 1 second),
date_add('2017-12-18 22:51:00', interval 1 minute),
date_add('2017-12-18 22:51:00', interval 1 hour),
date_add('2017-12-18 22:51:00', interval 1 day),
date_add('2017-12-18 22:51:00', interval 1 month),
date_add('2017-12-18 22:51:00', interval 1 year);

Comment gérer date_add en cas de mois bissextile ? MySQL renvoie la date du 29 février s'il s'agit d'un mois bissextile, et du 28 février s'il ne s'agit pas d'un mois bissextile.

select date_add('2016-02-29 22:51:00', interval -1 year),
date_add('2016-02-29 22:51:00', interval 4 year);
2015-02-28 22:51:002020-02-29 22:51:00

② datediff et timediff

  • datediff(date1, date2) : soustrayez deux dates date1 - date2 et renvoyez le nombre de jours. select datediff('2016-02-29 22:51:00','2016-03-29 22:51:00');

  • timediff(time1, time2) : soustrait deux dates time1 - time2, renvoie le décalage horaire (format : 838:59:59). select timediff('2016-02-29 22:51:00','2016-01-29 22:51:00');

Remarque : Les deux types de paramètres de la fonction timediff(time1,time2) doivent être le même.

③ augmentation, diminution de l'horodatage, fonction de conversion

  • timestamp(date) -- date en timestamptimestamp(date)  -- date to timestamp

  • timestamp(date, time) -- date + time

  • timestampadd(unit,interval,datetime_expr)   -- 类似date_add,对时间按单位进行增加,减少

select timestampadd(second, 60, '2017-12-18 00:00:00');
select timestampadd(minute, 60, '2017-12-18 00:00:00');
select timestampadd(hour, 60, '2017-12-18 00:00:00');
  • timestampdiff(unit,datetime_expr1,datetime_expr2)

timestamp(date, time) -- date + time

timestampadd(unit,interval,datetime_expr) -- similaire à date_add, augmente et diminue le temps par unité

select timestampdiff(second, '2017-12-18 00:00:00','2017-12-18 12:00:00');
select timestampdiff(hour, '2017-11-18 00:00:00','2017-12-18 12:00:00');
select timestampdiff(day, '2017-10-17 00:00:00','2017-11-18 23:00:00');
timestampdiff(unit,datetime_expr1, datetime_expr2 ) -- Calculez la différence entre deux heures, vous pouvez calculer les secondes, les minutes, les heures, les jours, les mois, les années, les semaines

select date_format(now(),'%Y%m%d'),
date_format(now(),'%Y-%m-%d'),
date_format(now(),'%Y/%m/%d'),
date_format(now(),'%m/%d/%Y');

④ fonction date_format

la fonction date_format est principalement utilisée pour formater les dates

select *
from employees
where date_format(birth_date,'%Y-%m-%d') = '1961-08-03';

Remarque : si vous utilisez cette fonction sur un champ de date lors de l'interrogation de données, l'optimiseur n'utilisera pas l'index du champ et vous ne pourrez pas non plus interroger les données via l'index, l'efficacité de la requête sera donc très faible, par exemple. l'instruction de requête suivante, si le champ Birth_date a Index, alors l'index n'est pas valide en raison de l'utilisation de la fonction date_format : 🎜
-- 上一年,当年,下一年生日与当前时间差最小的年就是用户最近的生日
select emp_no,first_name,last_name,birth_date,today,if(last_diff<=cur_diff and last_diff<=next_diff, last,if(cur_diff
from
(
-- 计算当前时间与上一年,当年,下一年生日的时间差
select emp_no,first_name,last_name,birth_date,datediff(today,last) as last_diff,abs(datediff(today,cur)) as cur_diff,abs(datediff(today,next)) as next_diff,
last,cur,next,today
from
(
-- 用户最近的生日可能分布在前一年,当年,下一年。根据年度差year_diff计算上一年,当年,下一年用户的生日
select emp_no,first_name,last_name,birth_date,
DATE_ADD(birth_date,INTERVAL year_diff year) as cur,
DATE_ADD(birth_date,INTERVAL year_diff+1 year) as next,
DATE_ADD(birth_date,INTERVAL year_diff-1 year) as last,
today
from
(
-- 获取当前事前与出生日期的年度差 year_diff
select emp_no,first_name,last_name,birth_date,(year(NOW())-year(birth_date)) as year_diff, NOW() as today
from employees
) a
) b
) c
🎜🎜🎜Le problème de programmation classique de date🎜🎜🎜🎜Calculer le dernier anniversaire d'un utilisateur (y compris le passé et futurs) en fonction de sa date de naissance et de la date actuelle)🎜rrreee🎜【Recommandations associées :🎜tutoriel vidéo mysql🎜】🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn