2009-03-30 8 views

Répondre

7

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

+0

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

1
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.

0

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.

0

Une autre caractéristique est entre:

Select * from table where date between '2009/01/30' and '2009/03/30' 
0

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)

1
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 
+0

merci beaucoup "Pang" pour l'édition de mon commentaire, –

Questions connexes