我正在查詢包含時間戳的表(例如:2011-05-03 09:52:00)。Microsoft SQL查詢時間戳
需要查詢整個表格並查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之間輸入的時間戳。
什麼是最好的方法?
謝謝!
我正在查詢包含時間戳的表(例如:2011-05-03 09:52:00)。Microsoft SQL查詢時間戳
需要查詢整個表格並查找在任何一天,任何月份和任何一年的18:00:00至20:00:00之間輸入的時間戳。
什麼是最好的方法?
謝謝!
SELECT *
FROM YourTable
WHERE DATEPART(hh, YourColumn) BETWEEN 18 AND 20
OP要求「18:00:00至20:00:00之間」。這將包括「20:59:59」 – 2011-05-03 16:22:47
@Martin:你是對的。 – 2011-05-03 16:28:13
這一個只會betwee 18和20,時間戳包括18:00:00和20:00:00
SELECT *
FROM YourTable
WHERE CONVERT(varchar(8), YourDateColumn, 108) between '18:00:00' and '20:00:00'
SQL Server中包含'BETWEEN',因此將包含端點。 – 2011-05-03 16:57:12
right - 就是一個例子,所以如果OP不想要18:00,他可以這樣做:在'18:00:01'和'19:59:59'之間 – 2011-05-03 16:59:51
儘管看起來第一個答案已經被選中了它爲他工作:) – 2011-05-03 17:00:09
對於SQL Server 2008(什麼OP標記了一個問題,有關),明顯的方法很簡單:
select *
from someTable t
where convert(time,t.dtColumn) between '18:00' and '20:00'
下面就爲SQL Server的任何版本的
select *
from someTable t
where t.dtColumn between dateadd(hour,18,convert(datetime,convert(varchar,t.dtColumn,112),112))
and dateadd(hour,20,convert(datetime,convert(varchar,t.dtColumn,112),112))
Between
是對測試範圍的上限和下限的兼容性測試WRT。爲了使測試獨家WRT一個約束或其他的,你需要這樣的東西沿着這些路線:
select *
from someTable t
where convert(time,t.dtColumn) >= '18:00'
and convert(time,t.dtColumn) < '20:00'
或
select *
from someTable t
where t.dtColumn >= dateadd(hour,18,convert(datetime,convert(varchar,t.dtColumn,112),112))
and t.dtColumn < dateadd(hour,20,convert(datetime,convert(varchar,t.dtColumn,112),112))
在該範圍的兩側包容性?即您想要時間戳> ='18:00:00'和<='20:00:00'? – 2011-05-03 16:27:38