2012-06-10 126 views
0

我試圖獲得兩次之間的訪問時間。SQL Server 2008查找時間

accesstime starttime endtime 
23:00   22:00  00:00:00 

我查詢這個樣子的

select accesstime 
from myTable 
where accesstime between '22:00:00'and '00:00:00' 

當我運行查詢我沒有得到任何結果

爲什麼?

+0

你有什麼列類型? –

+0

列將accesstime類型datetime,starttime類型datetime和endtime類型datetime – user1446930

+1

那麼,你指定什麼看起來像時間文字,而不是日期文字。因此,'00:00:00'將成爲當天的開始,'22:00:00''將在22小時後開始。你如何退一步,告訴我們你想要達到的目標,這樣我們就可以在這個層面上爲你提供幫助。 –

回答

1

因爲時間的推移,從00:00:0023:59:59

所以,22:00是在同一天

編輯比00:00:00更大:此考慮爲DateTime。如果他們是Varchar,你有同樣的問題,因爲22:00作爲Varchar是大於00:00:00

+0

是否有另一種顯示此訪問時間的方法? – user1446930

+0

您的endTime應該是'23:59:59',因爲'00:00:00'是第二天。 '選擇來自myTable 的訪問時間,其中訪問時間'22:00:00'和'23:59:59'' –

1

信息有關BETWEEN

返回TRUE BETWEEN如果與test_expression的值大於 或等於到begin_expression的值並且小於或等於 的值end_expression

在表格,accesstime '23:00' (測試表達式)大於'22:00:00' (開始表達),但是不小於'00:00:00' (端表達式),所以它返回false。

爲了看到效果,改變你的查詢:

select accesstime from myTable 
where accesstime between '00:00:00' and '23:00:01' 
0

我想你可以轉換日期時間DATEADD功能添加一天時間'00:00: 00「,然後它就可以正常工作。

示例代碼是在這裏:

CREATE table EX_Time (accesstime nvarchar(100),starttime nvarchar(100),endtime nvarchar(100)) 

INSERT INTO EX_Time(accesstime,starttime,endtime) 
VALUES (N'23:00:00',N'22:00:00',N'00:00:00') 

select * 
FROM Ex_Time 
Where convert(datetime,accesstime) BETWEEN convert(datetime,'22:00:00') 
AND dateadd(day,1,convert(datetime,'00:00:00')) 
+1

由於您強制該子句不可更改,因此您很難更好地轉換或轉換列強制掃描。更多訪問時間列是日期時間類型,所以它實際上沒有意義將其再次轉換爲日期時間 – praveen