2016-04-29 149 views
1

我有一個帶有主鍵的datetimeoffset字段的表。我想用日期時間過濾我的表格。按日期時間選擇datetimeoffset字段

例如我的表有:

2016-04-27 23:30:00.7684500 +03:00 
2016-04-28 00:30:00.7684500 +03:00 

在本地時間格式,第一行是指2016年4月29日2點30分零零秒排和第二排是指2016年4月28日03:30:00。我的意思是他們中的兩個:2016-04-28。

當我想在2016-04-28日期報告交易時,我只得到第二排。

declare @fromDate datetime 
select @fromDate = '2016-04-28 00:00:00' 
select * from MYTABLE where dto > @fromDate 

因爲sql在datetimetimeset字段中查看UTC時間。

我能得到我真正想要的是這樣的:

declare @fromDate datetime 
select @fromDate = '2016-04-28 00:00:00' 
select * from MYTABLE where CAST(dto as datetime) > @fromDate 

第一和第二行正在添加有。

問題是,我是否失去了投射表演?系統尋找和鑄造每一行(順序讀取),即使dto是主鍵?

有沒有更好的方法?

非常感謝...

+0

標籤使用的數據庫管理系統。 (該代碼看起來不像ANSI SQL ...) – jarlh

+0

謝謝。這是MS SQL服務器2014。 –

回答

0

絕對......我會建議在表中添加一個計算字段。這樣,轉換將在SQL中自動進行,並且查詢中不需要CAST或CONVERT。請在計算字段搜索,並插入你的代碼

CONVERT(DATETIME, dto, 109) 

TRY_CONVERT(DATETIME, dto, 109) 

我會用TRY_CONVERT,你可以專門設置日期時間的格式爲您的新計算領域,如果由於某種原因, dto不是有效的日期,它將插入NULL而不是失敗。

1

如果你的偏移量(+3)是一個常數,你可以試試這個:

declare @fromDate datetime 
select @fromDate = '2016-04-28 00:00:00' 
select * from MYTABLE where dateadd(hour, 3, dto) > @fromDate 

或者你可以使用TODATETIMEOFFSET

如下:

select * from MYTABLE where TODATETIMEOFFSET(dto, '03:00') > @fromDate 
相關問題