sélectionner des lignes en fonction du time

J'ai sélectionné des lignes basées sur DateTime avant d'utiliser:

DATEADD(day, -1, GetDate()) AND GETDATE() 

pour get le dernier record depuis hier, et

  DECLARE @today DATETIME = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME) DATEADD(mi, 00, DATEADD(hh, 8, @today)) AND DATEADD(hh, 9, @today) 

Afin d'get une rangée qui était entre un certain laps de time de la journée en cours. Maintenant, j'ai une table qui a une colonne d'heure et de date, donc les deux ne fonctionnent pas. Je reçois toujours une erreur lorsque j'essaie l'une des methods ci-dessus en disant: "Les types de données time et datetime sont incompatibles dans l'opérateur supérieur ou égal à." Je sais que le problème est que je n'ai pas de colonne de type DateTime à referencer. Y at-il un moyen d'get une rangée entre un certain time référençant des champs de time et de date distincts? Merci

Vous pouvez append les champs Date et Heure pour créer un champ de date / heure unique avec lequel comparer:

 create table #temp (id int, d date, t time) insert into #temp values (1, '1/1/2000', '1:00 PM') insert into #temp values (2, '1/1/2000', '2:00 PM') insert into #temp values (3, '1/1/2000', '3:00 PM') select * from #temp where cast(d as datetime) + cast(t as datetime) between '1/1/2000 1:10 PM' and '1/1/2000 2:30 PM' 

Donc, à condition que votre DATEADD() soit configuré correctement, vous pouvez le faire:

 SELECT * FROM sometable WHERE cast(DateField as datetime) + cast(TimeField as datetime) BETWEEN DATEADD(mi, 00, DATEADD(hh, 8, @today)) AND DATEADD(hh, 9, @today) 
 DECLARE @today DATE = SYSDATETIME(); DECLARE @start DATETIME = DATEADD(HOUR, 8, @today); DECLARE @end DATETIME = DATEADD(HOUR, 1, @start); SELECT ... FROM dbo.table ... WHERE date_column = @today -- to narrow search first, efficiently, if indexed AND DATEADD(DAY, DATEDIFF(DAY, 0, date_column), CONVERT(DATETIME, time_column)) >= @start AND DATEADD(DAY, DATEDIFF(DAY, 0, date_column), CONVERT(DATETIME, time_column)) < @end; ---- you may want <= here rather than <