我試圖獲得兩次之間的訪問時間。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'
當我運行查詢我沒有得到任何結果
爲什麼?
我試圖獲得兩次之間的訪問時間。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'
當我運行查詢我沒有得到任何結果
爲什麼?
因爲時間的推移,從00:00:00
到23:59:59
所以,22:00
是在同一天
編輯比00:00:00
更大:此考慮爲DateTime
。如果他們是Varchar
,你有同樣的問題,因爲22:00
作爲Varchar
是大於00:00:00
是否有另一種顯示此訪問時間的方法? – user1446930
您的endTime應該是'23:59:59',因爲'00:00:00'是第二天。 '選擇來自myTable 的訪問時間,其中訪問時間'22:00:00'和'23:59:59'' –
信息有關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'
我想你可以轉換次日期時間和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'))
由於您強制該子句不可更改,因此您很難更好地轉換或轉換列強制掃描。更多訪問時間列是日期時間類型,所以它實際上沒有意義將其再次轉換爲日期時間 – praveen
你有什麼列類型? –
列將accesstime類型datetime,starttime類型datetime和endtime類型datetime – user1446930
那麼,你指定什麼看起來像時間文字,而不是日期文字。因此,'00:00:00'將成爲當天的開始,'22:00:00''將在22小時後開始。你如何退一步,告訴我們你想要達到的目標,這樣我們就可以在這個層面上爲你提供幫助。 –