Dans sqlserver, comment comparer les dates? Par exemple:Comment utiliser select avec les conditions de date?
Select * from Utilisateurs où RegistrationDate> = '1/20/2009'
(RegistrationDate est de type datetime)
Merci
Dans sqlserver, comment comparer les dates? Par exemple:Comment utiliser select avec les conditions de date?
Select * from Utilisateurs où RegistrationDate> = '1/20/2009'
(RegistrationDate est de type datetime)
Merci
Si vous mettez dans
SELECT * FROM Users WHERE RegistrationDate >= '1/20/2009'
il convertira automatiquement la chaîne '1/20/2009'
dans le format DateTime
pour une date de 1/20/2009 00:00:00
. Donc, en utilisant >=
vous devriez obtenir tous les utilisateurs dont la date d'enregistrement est le 20/01/2009 ou plus récente. Edit: Je mets ceci dans la section des commentaires mais je devrais probablement lier ici aussi. Ceci est un article détaillant un peu plus d'une façon de travailler avec la profondeur de DateTime est en vous interroge: http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables-Part-Three---Searching-for-Particular-Date-Values-and-Ranges.htm
Select * from Users where RegistrationDate >= CONVERT(datetime, '01/20/2009', 103)
est sûr à utiliser, indépendamment des paramètres de date sur le serveur.
La liste complète des styles peut être trouvée here.
Je reçois toujours la date de filtre dans un datetime, sans temps (temps = 00: 00: 00,000)
DECLARE @FilterDate datetime --final destination, will not have any time on it
DECLARE @GivenDateD datetime --if you're given a datetime
DECLARE @GivenDateS char(23) --if you're given a string, it can be any valid date format, not just the yyyy/mm/dd hh:mm:ss.mmm that I'm using
SET @GivenDateD='2009/03/30 13:42:50.123'
SET @GivenDateS='2009/03/30 13:42:50.123'
--remove the time and assign it to the datetime
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateD), 0)
--OR
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateS), 0)
Vous pouvez utiliser cette clause WHERE pour ensuite filtrer:
WHERE ColumnDateTime>[email protected] AND ColumnDateTime<@FilterDate+1
cela donnera tous les matchs qui sont sur ou après le début de la journée le 2009/03/30 jusqu'à et y compris le jour complet le 2009/03/30
vous pouvez faire la même chose pour les paramètres de filtre START et END comme bien. Définissez toujours la date de début comme étant une date et utilisez l'heure zéro le jour voulu, puis définissez la condition "> =". Toujours faire la date de fin l'heure zéro le jour après que vous voulez et utilisez "<". En faisant cela, vous inclurez toujours toutes les dates correctement, quelle que soit la partie horaire de la date.
Une autre caractéristique est entre:
Select * from table where date between '2009/01/30' and '2009/03/30'
si vous ne voulez pas être dérangé par le format de date, vous pouvez comparer la colonne avec le format de date générale, par exemple
select * From table where cast (RegistrationDate as date) between '20161201' and '20161220'
assurez-vous que la date est au format DATE, sinon cast (col as DATE)
select sysdate from dual
30-MAR-17
select count(1) from masterdata where to_date(inactive_from_date,'DD-MON-YY'
between '01-JAN-16' to '31-DEC-16'
12998 rows
merci beaucoup "Pang" pour l'édition de mon commentaire, –
Vous trouverez plus d'informations sur les types de données DateTime et les requêtes SQL Server ici: http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables -Part-Trois --- Recherche-de-particulier-Date-Valeurs-et-Ranges.htm – TheTXI