2013-07-01 14 views
8

Mam tabelę, która ma kolumnę "Utworzono" jako datetime.Sprawdź, czy czas jest między dwa razy (czas DataType)

Próbuję wykonać kwerendę, aby sprawdzić, czy czas utworzenia wartości Utworzono między dwoma wartościami.

Utworzona data i godzina dla pierwszego wiersza to "2013-07-01 00: 00: 00.000" (północ) i próbuję wyszukiwać produkty z czasem między godziną 11 a 7 rano.

select * 
from MyTable 
where CAST(Created as time) between '23:00:00' and '06:59:59' 

Ale wyniki nie są zwracane.

Czy muszę konwertować moje czasy do datetimes?

+3

7:00 następnego dnia? –

+0

podobne pytanie z przykładu [tutaj] [1] [1]: http://stackoverflow.com/questions/5125076/sql-query-to-select-dates-between-two-dates –

+0

Tak między 11.00 a 7.00 następnego dnia – TrueEddie

Odpowiedz

26

Podejrzewam chcesz sprawdzić, że jest to po godzina dwudziesta trzecia lub przed 7 rano:

select * 
from MyTable 
where CAST(Created as time) >= '23:00:00' 
    or CAST(Created as time) < '07:00:00' 
+0

To działało idealnie, dzięki! – TrueEddie

+0

Dobra odpowiedź, ale dotyczy to tylko serwera SQL 2008 i nowszego –

+0

Należy również zachować ostrożność, jeśli chce się grupować elementy na podstawie daty. Gdyby o 6 rano coś było zapakowane, zgrupowałoby się z czymś jeszcze zapakowanym dziś wieczorem o 23:30. Jeśli chcesz pogrupować się na podstawie daty, sugerowałbym dodanie godziny lub odjęcie siedmiu godzin, a następnie wykonanie obliczeń, jeśli to konieczne. –

1

ta powinna także działać (nawet w SQL Server 2005):

SELECT * 
FROM dbo.MyTable 
WHERE Created >= DATEADD(hh,23,DATEADD(day, DATEDIFF(day, 0, Created - 1), 0)) 
    AND Created < DATEADD(hh,7,DATEADD(day, DATEDIFF(day, 0, Created), 0)) 

DEMO

6
select * 
from MyTable 
where CAST(Created as time) not between '07:00' and '22:59:59 997' 
-1

Powinien być OR zamiast OR

select * 
from MyTable 
where CAST(Created as time) >= '23:00:00' 
    AND CAST(Created as time) < '07:00:00' 
+0

Nie ma "OR" w pytaniu? – Carpetsmoker

+0

Czas nigdy nie może być mniejszy niż "7: 00" i większy niż "23: 00", więc 'AND' powoduje, że zwracanych jest 0 rekordów bez względu na wszystko. – MarredCheese

Powiązane problemy