Maison > base de données > tutoriel mysql > le corps du texte

MySQL peut-il comparer le temps ?

(*-*)浩
Libérer: 2020-09-15 13:38:23
original
14455 Les gens l'ont consulté

La comparaison du temps peut être implémentée dans MySQL, avec des instructions telles que [ SELECT testdate FROM t1 WHERE testdate >= '2018-09-12';SELECT testdate FROM t1 WHERE testdate >= 20180912;].

MySQL peut-il comparer le temps ?

Récemment, j'ai constaté que je comparais les dates de manière incorrecte. Par exemple, dans l'instruction suivante, le champ a est une colonne de type DATETIME :

select a from t1 where DATEDIFF(a, &#39;2018-09-11&#39;) < 0;
Copier après la connexion

Cette instruction permet de rechercher tous les enregistrements antérieurs à la date du 11/09/2018, mais il y a un problème avec cette instruction. Si le champ a est indexé, l'utilisation de ce type pour la comparaison de dates entraînera la requête. de ne pas utiliser l'index. Cela réduit les performances des requêtes.

Cours recommandé : Tutoriel MySQL.

MySQL peut-il comparer le temps ?

Lisez la documentation de Mysql sur la comparaison des champs de date. Lors de la comparaison de dates, MySQL convertira automatiquement la date en nombre à des fins de comparaison. Après la condition Where, lors de l'utilisation de dates au format chaîne pour comparer avec les champs de type DATE, DATETIME, TIMESTAMP et TIME, les exigences en matière de format de chaîne ne sont pas strictes. Vous pouvez utiliser n'importe quel délimiteur de format pour représenter la date, tel que « 2018-09-. 11", "2018#09#11", "2018&09&11" sont toutes les mêmes dates pour MySQL. S'il n'y a pas de délimiteur, tel que « 20180911 », c'est la même chose que « 2018-09-11 » ou d'autres dates avec délimiteurs. Par exemple, l'image ci-dessous

select a from t1 where a < &#39;2018#09#11&#39;;
与
select a from t1 where a < &#39;2018-09-11&#39;;
与
select a from t1 where a < &#39;20180911&#39;;
所代表的意义是相同的,都是查询日期小于2018年9月11日的数据
也就是说上图的查询语句,完全可以重写为,这么做的好处?就是会使用索引,是查询更快
select a from t1 where a < &#39;2018-09-11&#39;;
Copier après la connexion

Lors de la comparaison d'un champ de type date avec une date de type chaîne par <, >, >=, <=, entre, Mysql convertira la date de type chaîne en un entier Les numéros de type sont comparés pour accélérer les requêtes.

Sauf les trois situations suivantes :

1, comparaison de deux champs de table

2, comparaison de champs de type date et d'expressions

3 ; , utilisez des expressions pour comparer les champs de type date ;

Raison : Pour les trois situations ci-dessus, MySQL convertira la date en chaîne à des fins de comparaison.

Les exemples suivants peuvent tous s'exécuter normalement :

INSERT INTO t1 (testdate) VALUES (20180912);
INSERT INTO t1 (testdate) VALUES (&#39;20180912&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;18-09-12&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;2018.09.12&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;2018 09 12&#39;);
INSERT INTO t1 (testdate) VALUES (&#39;0000-00-00&#39;);

SELECT testdate FROM t1 WHERE testdate >= &#39;2018-09-12&#39;;
SELECT testdate FROM t1 WHERE testdate >= 20180912;
SELECT MOD(testdate,100) FROM t1 WHERE testdate >= 20180912;
SELECT testdate FROM t1 WHERE testdate >= &#39;20180912&#39;;
Copier après la connexion

Mysql permet de stocker "0000-00-00" comme valeur "0" de type DATE, également appelée date virtuelle. Dans certains scénarios, cela est plus pratique que de stocker des valeurs NULL. Si une valeur de date illégale est enregistrée dans un champ de type DATE, MySQL la stocke par défaut sous le nom "0000-00-00". Si le stockage des valeurs "0" n'est pas autorisé, activez le paramètre NO_ZERO_DATE.

Vous pouvez également utiliser la fonction unix_timestamp pour convertir l'heure des caractères en un horodatage Unix.

select meeting_id,meeting_name,start_time,end_time from meeting_data 
	where meeting_id REGEXP &#39;[0-9]{4}0001&#39; 
		and unix_timestamp(start_time) < unix_timestamp(NOW()) 
		and unix_timestamp(end_time) > unix_timestamp(NOW());
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal