107 votes

SQL Server datetime LIKE sélectionner?

en MySQL

 select * from record where register_date like '2009-10-10%'
 

Quelle est la syntaxe dans SQL Server?

Je vous remercie.

159voto

Ralph Lavelle Points 2643

Vous pouvez utiliser la DATEPART() la fonction

SELECT * FROM record 
WHERE  (DATEPART(yy, register_date) = 2009
AND    DATEPART(mm, register_date) = 10
AND    DATEPART(dd, register_date) = 10)

Je trouve cette façon, facile à lire, comme il ignore le temps composant, et vous n'avez pas à utiliser le jour suivant la date de restreindre votre sélection. Vous pouvez aller à plus ou moins grande granularité par l'ajout de clauses à l'aide de la Partie de code, par exemple

AND    DATEPART(hh, register_date) = 12)

pour obtenir des enregistrements réalisés entre 12 et 1.

Consultez le MSDN DATEPART docs pour la liste complète des arguments valables.

73voto

marc_s Points 321990

Il n'y a pas de support direct pour l'opérateur LIKE par rapport aux variables DATETIME, mais vous pouvez toujours convertir le DATETIME en VARCHAR:

 SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
 

Consultez la documentation MSDN pour obtenir une liste complète des "styles" disponibles dans la fonction CONVERT.

Marc

10voto

Marc Gravell Points 482669

Si vous faites cela, vous le forcez à effectuer une conversion de chaîne. Il serait préférable de créer une plage de dates de début / fin et d’utiliser:

 declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
           and register_date < @end
 

Cela lui permettra d'utiliser l'index (s'il en existe un sur register_date ), plutôt que d'un scan de table.

8voto

Andomar Points 115404

Vous pouvez utiliser CONVERT pour obtenir la date sous forme de texte. Si vous le convertissez en varchar (10), vous pouvez utiliser = au lieu de:

 select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
 

Ou vous pouvez utiliser une date limite supérieure et inférieure, avec l'avantage supplémentaire de pouvoir utiliser un index:

 select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
 

4voto

Steve M Points 11

Vous pouvez également utiliser convert pour rendre la date consultable à l'aide de LIKE. Par exemple,

 select convert(VARCHAR(40),create_date,121) , * from sys.objects where     convert(VARCHAR(40),create_date,121) LIKE '%17:34%'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X