Maison  >  Article  >  base de données  >  Comment interroger les champs de date et d'heure MySQL

Comment interroger les champs de date et d'heure MySQL

WBOY
WBOYavant
2023-05-27 09:04:335455parcourir

1. Présentation des types de date et d'heure

Les types de date et d'heure pris en charge par MySQL sont DATETIME, TIMESTAMP, DATE, TIME, YEAR

La comparaison de plusieurs types est la suivante :

Comment interroger les champs de date et dheure MySQL

Iciant la date. et types de champs temporels Lors du choix, choisissez simplement le type approprié en fonction de vos besoins de stockage.

2. Fonctions liées à la date et à l'heure

Il existe de nombreuses fonctions pour traiter les champs de date et d'heure, dont certaines sont souvent utilisées dans les requêtes.

Ce qui suit est une introduction à l'utilisation de plusieurs fonctions associées :

    .
  • Les deux fonctions CURDATE et CURRENT_DATE ont le même effet et renvoient la valeur de date du système actuel.

  • Les deux fonctions CURTIME et CURRENT_TIME ont le même effet et renvoient la valeur temporelle du système actuel.

  • NOW() et SYSDATE() ont la même fonction et renvoient la valeur de date et d'heure du système actuel.

  • UNIX_TIMESTAMP Obtient la fonction d'horodatage UNIX et renvoie un entier non signé basé sur l'horodatage UNIX.

  • FROM_UNIXTIME convertit l'horodatage UNIX au format d'heure et est la fonction inverse d'UNIX_TIMESTAMP.

  • TO_DAYS() extrait une valeur de date et renvoie le nombre de jours depuis AD ​​0.

  • DAY() Obtient la valeur du jour à la date ou à l'heure spécifiée.

  • DATE() Obtient la date à la date ou à l'heure spécifiée.

  • TIME() Obtient l'heure à la date ou à l'heure spécifiée.

  • MONTH Obtient le mois à la date spécifiée.

  • WEEK Obtient le numéro de semaine de l'année pour la date spécifiée.

  • ANNÉE Obtenez l'année.

  • QUARTER Obtient la valeur trimestrielle de la date.

  • DATE_ADD et ADDDATE sont deux fonctions avec la même fonction, elles ajoutent toutes deux l'intervalle de temps spécifié à la date.

  • DATE_SUB et SUBDATE ont la même fonction, ils soustraient tous les deux l'intervalle de temps spécifié de la date.

  • ADDTIME Opération d'ajout de temps, ajoute l'heure spécifiée à l'heure d'origine.

  • Opération de soustraction de temps SUBTIME, soustrayez l'heure spécifiée de l'heure d'origine.

  • DATEDIFF Obtient l'intervalle entre deux dates et renvoie la valeur du paramètre 1 moins le paramètre 2.

  • DATE_FORMAT formate la date spécifiée et renvoie la valeur au format spécifié en fonction des paramètres.

Quelques exemples d'utilisation :

mysql> select CURRENT_DATE,CURRENT_TIME,NOW();
+--------------+--------------+---------------------+
| CURRENT_DATE | CURRENT_TIME | NOW()               |
+--------------+--------------+---------------------+
| 2020-06-03   | 15:09:37     | 2020-06-03 15:09:37 |
+--------------+--------------+---------------------+

mysql> select TO_DAYS('2020-06-03 15:09:37'),
TO_DAYS('2020-06-03')-TO_DAYS('2020-06-01');
+--------------------------------+---------------------------------------------+
| TO_DAYS('2020-06-03 15:09:37') | TO_DAYS('2020-06-03')-TO_DAYS('2020-06-01') |
+--------------------------------+---------------------------------------------+
|                         737944 |                                           2 |
+--------------------------------+---------------------------------------------+

mysql> select MONTH('2020-06-03'),WEEK('2020-06-03'),YEAR('2020-06-03');
+---------------------+--------------------+--------------------+
| MONTH('2020-06-03') | WEEK('2020-06-03') | YEAR('2020-06-03') |
+---------------------+--------------------+--------------------+
|                   6 |                 22 |               2020 |
+---------------------+--------------------+--------------------+

# DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数
mysql> SELECT DATEDIFF('2017-11-30','2017-11-29') AS COL1,
    -> DATEDIFF('2017-11-30','2017-12-15') AS col2;
+------+------+
| COL1 | col2 |
+------+------+
|    1 |  -15 |
+------+------+

3. Requête canonique pour les champs de date et d'heure

Soyez prêt à répondre à nos besoins en matière de requêtes, les besoins du projet impliquent généralement des requêtes de filtrage conditionnel basées sur la date ou l'heure. Voyons comment interroger et filtrer les champs de date et d'heure, car ces besoins sont divers.

Tout d'abord, afin de rendre la requête plus précise, lors de l'insertion de données, celles-ci doivent également être insérées conformément aux spécifications. Pour garantir que l'année utilise 4 chiffres et que la date et le mois se situent dans une plage raisonnable, nous avons créé un tableau et inséré quelques données pour faciliter les tests.

CREATE TABLE `t_date` (
`increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`year_col` YEAR NOT NULL  COMMENT '年',
`date_col` date NOT NULL  COMMENT '日期',
`time_col` time NOT NULL  COMMENT '时间',
`dt_col` datetime NOT NULL  COMMENT 'datetime时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`increment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='time测试表';
# 日期和时间都选取当前的日期或时间
INSERT INTO t_date (year_col,date_col,time_col,dt_col,create_time) VALUES 
(year(now()),DATE(NOW()),time(now()),NOW(),NOW());
# 指定日期或时间插入
INSERT INTO t_date ( `year_col`, `date_col`, `time_col`, `dt_col`, `create_time` )
VALUES
    ( 2020, '2020-06-03', '09:00:00', '2020-06-03 10:04:04', '2020-06-03 10:04:04' ),
    ( 2020, '2020-05-10', '18:00:00', '2020-05-10 16:00:00', '2020-05-10 16:00:00' ),
    ( 2019, '2019-10-03', '16:04:04', '2019-10-03 16:00:00', '2019-10-03 16:00:00' ),
    ( 2018, '2018-06-03', '16:04:04', '2018-06-03 16:00:00', '2018-06-03 16:00:00' ),
    ( 2000, '2000-06-03', '16:04:04', '2000-06-03 08:00:00', '2000-06-03 08:00:00' ),
    ( 2008, '2008-06-03', '16:04:04', '2008-06-03 08:00:00', '2008-06-03 08:00:00' ),
    ( 1980, '1980-06-03', '16:04:04', '1980-06-03 08:00:00', '1980-06-03 08:00:00' );

Sur la base des données du tableau de test ci-dessus, apprenons à écrire plusieurs instructions de requête courantes :

Requête basée sur la date ou l'équivalent d'une heure :

select * from t_date where year_col = 2020;
select * from t_date where date_col = '2020-06-03';
select * from t_date where dt_col = '2020-06-03 16:04:04';

Requête basée sur une date ou une plage horaire :

select * from t_date where date_col > '2018-01-01';
select * from t_date where dt_col >= &#39;2020-05-01 00:00:00&#39; and dt_col < &#39;2020-05-31 23:59:59&#39;;
select * from t_date where dt_col between &#39;2020-05-01 00:00:00&#39; and  &#39;2020-05-31 23:59:59&#39;;

Interroger les données de ce mois-ci :

# 查询create_time在本月的数据
select * from t_date where DATE_FORMAT(create_time, &#39;%Y-%m&#39; ) = DATE_FORMAT( CURDATE( ) , &#39;%Y-%m&#39; );

Interroger les données des derniers jours :

# 以date_col为条件 查询最近7天或30天的数据
SELECT * FROM t_date where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(date_col);
SELECT * FROM t_date where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(date_col);

Autres méthodes d'écriture de requêtes :

# 查询今天的数据
SELECT * FROM t_date WHERE TO_DAYS(create_time) = TO_DAYS(NOW());
# 查询某个月的数据
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y-%m&#39;)=&#39;2020-06&#39;;
# 查询某年的数据
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y&#39;)= 2020;
SELECT * FROM t_date WHERE YEAR(create_time) = 2020;
# 根据日期区间查询数据,并排序
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y&#39;) BETWEEN &#39;2018&#39; AND &#39;2020&#39; ORDER BY create_time DESC;

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer