Cet article nous donnera une présentation des différentes méthodes pour comparer les valeurs datetime dans MySQL. Dans MySQL, nous pouvons stocker des dates dans DATE
et TIMESTAMP
Types de données. Les deux types de données stockent les données au format « AAAA-MM-JJ » « HH:MM:SS ». Il existe quelques différences entre les deux types de données, telles que :
- Le
DATETIME
prend en charge « 1000-01-01 00:00:00 » à « 9999-12-31 23:59:59 », mais leTIMESTAMP
prend en charge « 1970-01-01 00:00:01 » à « 2038-01-19 03:14:07 » UTC. - Le
DATETIME
est constant, mais leTIMESTAMP
les valeurs changent en fonction du fuseau horaire utilisé par l’application carTIMESTAMP
les données convertiront l’heure actuelle en UTC et vice-versa.
Différences entre les deux types de données
Voici un exemple simple qui explique la différence entre les deux types de données :
Requête 1 : type de données DATETIME
Requête 2 : type de données TIMESTAMP
Maintenant, changez le fuseau horaire de IST (Indian Standard Time) à CST (Central Standard Time). Une fois les fuseaux horaires modifiés, le résultat de la requête change comme suit :
Requête 1 : type de données DATETIME
Requête 2 : type de données TIMESTAMP
La capture d’écran ci-dessus montre que l’horodatage est converti en fuseau horaire CST (UTC -6:00).
Cet article contient diverses requêtes, j’ai donc préparé une configuration de démonstration sur mon ordinateur pour le comprendre plus clairement. Les détails sont suivants :
Configuration de la démo
Pour la démonstration, j’ai créé une table nommée tblCustomer
dans la base de données sakila. Le code SQL pour créer la table est ci-dessous :
USE sakila;
CREATE TABLE tblCustomer (
customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(45) NOT NULL,
last_name VARCHAR(45) NOT NULL,
email VARCHAR(50) DEFAULT NULL,
rental_id smallint UNSIGNED NOT NULL,
rental_date datetime,
return_date datetime,
PRIMARY KEY (customer_id)
);
J’ai inséré des enregistrements factices dans un tblCustomer
tableau. Le code SQL pour insérer des données est le suivant :
INSERT INTO sakila.tblcustomer(customer_id, first_name, last_name, email, rental_id, rental_date, return_date) VALUES
(1, 'PATRICIA', 'JOHNSON', 'PATRICIA.JOHNSON@sakilacustomer.org', 320, '2005-05-27 00:09:24', '2005-05-28 04:30:24'),
(2, 'TYLER', 'WREN', 'TYLER.WREN@sakilacustomer.org', 322, '2005-05-27 00:47:35', '2005-06-02 00:32:35'),
(3, 'CLARA', 'SHAW', 'CLARA.SHAW@sakilacustomer.org', 323, '2005-05-27 00:49:27', '2005-05-30 03:12:27'),
(4, 'DAVE', 'GARDINER', 'DAVE.GARDINER@sakilacustomer.org', 487, '2005-05-28 00:00:30', '2005-05-28 19:18:30'),
(5, 'REGINA', 'BERRY', 'REGINA.BERRY@sakilacustomer.org', 488, '2005-05-28 00:07:50', '2005-06-03 22:30:50'),
(6, 'DERRICK', 'BOURQUE', 'DERRICK.BOURQUE@sakilacustomer.org', 489, '2005-05-28 00:09:12', '2005-05-31 04:44:12'),
(7, 'SUE', 'PETERS', 'SUE.PETERS@sakilacustomer.org', 683, '2005-05-29 00:09:48', '2005-06-02 04:27:48'),
(8, 'DEREK', 'BLAKELY', 'DEREK.BLAKELY@sakilacustomer.org', 684, '2005-05-29 00:13:15', '2005-06-04 21:26:15'),
(9, 'BERNICE', 'WILLIS', 'BERNICE.WILLIS@sakilacustomer.org', 685, '2005-05-29 00:17:51', '2005-06-05 05:32:51'),
(10, 'NORMAN', 'CURRIER', 'NORMAN.CURRIER@sakilacustomer.org', 686, '2005-05-29 00:27:10', '2005-05-30 02:29:10'),
(11, 'JO', 'FOWLER', 'JO.FOWLER@sakilacustomer.org', 687, '2005-05-29 00:32:09', '2005-05-31 23:53:09'),
(14, 'BERNICE', 'WILLIS', 'BERNICE.WILLIS@sakilacustomer.org', 837, '2005-05-30 00:02:08', '2005-06-02 05:31:08'),
(15, 'NATHANIEL', 'ADAM', 'NATHANIEL.ADAM@sakilacustomer.org', 838, '2005-05-30 00:27:57', '2005-06-06 22:19:57'),
(17, 'DANIELLE', 'DANIELS', 'DANIELLE.DANIELS@sakilacustomer.org', 995, '2005-05-31 00:06:02', '2005-06-06 02:30:02'),
(18, 'ERIC', 'ROBERT', 'ERIC.ROBERT@sakilacustomer.org', 996, '2005-05-31 00:06:20', '2005-05-31 21:29:20'),
(19, 'NATALIE', 'MEYER', 'NATALIE.MEYER@sakilacustomer.org', 997, '2005-05-31 00:08:25', '2005-06-02 00:17:25'),
(20, 'ALAN', 'KAHN', 'ALAN.KAHN@sakilacustomer.org', 998, '2005-05-31 00:16:57', '2005-06-01 22:41:57'),
(21, 'MARVIN', 'YEE', 'MARVIN.YEE@sakilacustomer.org', 999, '2005-05-31 00:25:10', '2005-06-03 06:05:10');
Présentation de la fonction DATE()
Le DATE()
La fonction affiche la seule partie de date de l’expression datetime. Si l’expression est NULL
alors il revient aussi NULL
. Voici la syntaxe du DATE()
fonction:
- Sélectionner
DATE
(expression date-heure).
Prenons un exemple simple. Nous voulons afficher la partie date du rental_date
du tblCustomer
tableau. Pour y parvenir, nous pouvons écrire la requête comme suit :
Sortir
Comme vous pouvez le voir, la requête a extrait la partie date du rental_date
colonne.
Le DATE()
La fonction compare une expression de chaîne avec une valeur datetime. Par exemple, nous voulons extraire la liste des clients dont la date de location est « 28-05-2005 ». Pour cela, la requête s’écrit comme suit :
use sakila;
select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", rental_date "Rental Date" from tblcustomer where rental_date="2005-05-28";
Sortir
Comme vous pouvez le voir, la requête n’a renvoyé aucun enregistrement, car lorsque nous n’incluons pas le DATE()
fonction, la requête inclut la partie heure de la colonne datetime. Ainsi, si vous réécrivez la requête et incluez la partie heure, les enregistrements souhaités seront extraits :
use sakila;
select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", rental_date "Rental Date" from tblcustomer where rental_date="2005-05-28 00:00:30";
Sortir
Maintenant, incluons le DATE
fonction dans une requête :
use sakila;
select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", rental_date "Rental Date" from tblcustomer where date(rental_date)='2005-05-28';
Sortir
Comme vous le voyez, la requête a renvoyé une liste de clients dont la date de location est « 2005-05-28 ». Dans ce cas, l’indice n’est pas utilisé.
Le DATE()
La fonction peut être utilisée avec diverses clauses, opérateurs et fonctions. Comprenons-les avec des exemples simples :
Comparer deux dates à l’aide de la clause WHERE
Supposons que nous voulions remplir la liste des employés dont la date de location est supérieure à « 2005-05-27 » et dont la date de retour est inférieure à « 2005-06-01 ». La requête s’écrit comme suit :
use sakila;
select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", , rental_date , return_date from tblcustomer where date(rental_date)>'2005-05-27' and date(return_date)<'2005-06-01'
Sortir
Comme vous pouvez le voir dans la capture d’écran ci-dessus, nous avons ajouté le DATE()
fonction dans le WHERE
clause.
Voyons maintenant comment nous pouvons utiliser des opérateurs logiques et arithmétiques pour comparer deux dates.
Comparer deux dates à l’aide d’opérateurs logiques et arithmétiques
Par exemple, nous voulons afficher la liste des clients dont la date de location est supérieure à « 2005-05-30 ». Pour ce faire, nous utiliserons le >
(Opérateur arithmétique) Opérateur. La requête est ci-dessous :
use sakila;
select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", rental_date , return_date from tblcustomer where date(rental_date)>'2005-05-30'
Sortir
Prenons un autre exemple; nous voulons remplir la liste des clients dont la date de retour se situe entre « 2005-05-31 » et « 2005-06-03 ». Pour ce faire, nous utilisons BETWEEN
(Opérateur Logique). La requête est ci-dessous :
use sakila;
select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", rental_date , return_date from tblcustomer where date(return_date) between '2005-05-31' and '2005-06-03'
Sortir
Voyons maintenant comment nous pouvons utiliser la fonction pour comparer des dates. L’indice est utilisé dans ce cas.
Comparer deux dates à l’aide de la fonction DATEDIFF()
Supposons que nous voulions compter les jours entre le rental_date
et return_date
. Pour ce faire, nous utilisons DATEDIFF()
fonction. La requête est la suivante :
use sakila;
Select customer_id "CustomerID",first_name "First Name",last_name "Last Name",email "Email ID", rental_date,return_date, datediff(date(return_date),date(rental_date))"TotalDays" from tblcustomer Where date(rental_date)>='2005-05-30'
Sortir
Comparer des dates avec dbForge MySQL Studio
Le dbForge MySQL Studio a une fonctionnalité intéressante qui permet de filtrer les données des tables en comparant les dates. Nous pouvons utiliser cette option de deux manières :
- Comparez les dates de tous les enregistrements d’une table.
- Comparez les dates sur le jeu de résultats.
Comparer les dates sur tous les enregistrements de la table
Le dbForge MySQL Studio permet de visualiser tous les enregistrements dans un onglet de visionneuse de données. Pour faire ça:
- Lancez dbForge Studio pour MySQLConnectez-vous à la base de données sakila.
- Agrandir
- Développer les tableaux
- Clic-droit
tblCustomer
- Sélectionner « Récupérer des données.”
Voici la capture d’écran de l’explorateur de base de données :
Comme indiqué ci-dessous, les données de la tblCustomer
le tableau sera affiché dans un onglet de visionneuse de données :
Maintenant, nous voulons comparer la date de location de tous les clients et remplir la liste des clients dont la date de location dépasse le 2005-05-30. Pour ce faire, faites un clic droit sur le « location_date» et sélectionnez la colonne «filtre » option:
Une option de filtre de boîte de dialogue s’ouvre. Ici, vous pouvez ajouter plusieurs conditions qui peuvent être utilisées pour filtrer les données d’une table.
Nous voulons obtenir la liste des clients dont la date de location est supérieure au 30-05-2005. Pour ce faire, le filtre doit être défini comme indiqué ci-dessous :
Ensuite, cliquez sur « Appliquer: »
Comme vous pouvez le voir sur l’image ci-dessus, les données de tblCustomer
est filtré, et vous pouvez voir la liste des clients dont la date de location est supérieure au 2005-05-31.
Ici, je voudrais montrer une autre fonctionnalité intéressante de dbForge Studio pour MySQL 2022. Elle nous permet de mettre à jour les enregistrements directement à partir de la sortie de la requête. Par exemple, je veux mettre à jour le rental_date
du client nommé ALAN KHAN
. La valeur actuelle est « 31-05-2005 00:16:57 » et je veux la changer en « 01-06-2005 00:16:57 ». Pour cela, cliquez sur le rental_date
de ALAN KHAN
. Un calendrier s’ouvrira comme indiqué dans l’image suivante :
Changement…