SQL travaillant avec des dates
Dates SQL
La partie la plus difficile lorsque vous travaillez avec des dates est de vous assurer que le format de la date que vous essayez d'insérer correspond au format de la colonne de date dans la base de données.
Tant que vos données ne contiennent que la partie date, vos requêtes fonctionneront comme prévu. Cependant, si une portion de temps est impliquée, cela devient plus compliqué.
Types de données de date SQL
MySQL est fourni avec les types de données suivants pour stocker une date ou une valeur date/heure dans la base de données :
-
DATE
- format AAAA-MM-JJ -
DATETIME
- format : AAAA-MM-JJ HH:MI:SS TIMESTAMP
- format : AAAA-MM-JJ HH:MI:SS-
YEAR
- format AAAA ou AA
SQL Server est fourni avec les types de données suivants pour stocker une date ou une valeur date/heure dans la base de données :
-
DATE
- format AAAA-MM-JJ -
DATETIME
- format : AAAA-MM-JJ HH:MI:SS -
SMALLDATETIME
- format : AAAA-MM-JJ HH:MI:SS TIMESTAMP
- format : un numéro unique
Remarque : Les types de date sont choisis pour une colonne lorsque vous créez une nouvelle table dans votre base de données !
SQL Travailler avec des dates
Regardez le tableau suivant :
Tableau des commandes
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
Maintenant, nous voulons sélectionner les enregistrements avec une OrderDate de "2008-11-11" dans le tableau ci-dessus.
Nous utilisons l' SELECT
énoncé suivant :
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Le jeu de résultats ressemblera à ceci :
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Remarque : Deux dates peuvent facilement être comparées s'il n'y a pas de composante temporelle impliquée !
Maintenant, supposons que la table "Orders" ressemble à ceci (notez le composant de temps ajouté dans la colonne "OrderDate") :
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 13:23:44 |
2 | Camembert Pierrot | 2008-11-09 15:45:21 |
3 | Mozzarella di Giovanni | 2008-11-11 11:12:01 |
4 | Mascarpone Fabioli | 2008-10-29 14:56:59 |
Si nous utilisons la même SELECT
déclaration que ci-dessus :
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
nous n'obtiendrons aucun résultat ! En effet, la requête ne recherche que des dates sans portion horaire.
Conseil : Pour que vos requêtes restent simples et faciles à gérer, n'utilisez pas de composants de temps dans vos dates, sauf si vous y êtes obligé !