仅更改SQL中datetimeoffset的时间部分

Kev*_*Kev 5 t-sql sql-server datetimeoffset sql-server-2008

如何只设置SQL datetimeoffset变量的时间部分?

例如:

DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00'
Run Code Online (Sandbox Code Playgroud)

我想计算另外两个datetimeoffsets:

@startdate should be '2014-01-11 00:00:00 +02:00'
@enddate should be '2014-01-12 00:00:00 +02:00'
Run Code Online (Sandbox Code Playgroud)

但我尝试的所有解决方案都将偏移设置为零.

注意:我需要结果中的原始偏移量,因为我需要将它们与表中的某些datetimeoffset列进行比较.所以只是投射到一个日期是行不通的.

进一步说明:在SQL2012中这很容易; 我可以使用DATETIMEOFFSETFROMPARTS.不幸的是,我目前无法升级到2012.例:

SET @startdate = SELECT DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), 0, 0, 0, 0, datepart(tz, @date), 0, 7);
Run Code Online (Sandbox Code Playgroud)

Ano*_*non 5

DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00'

SELECT TODATETIMEOFFSET(CAST(@date AS date),DATEPART(tz,@date))
SELECT TODATETIMEOFFSET(DATEADD(day,1,CAST(@date AS date)),DATEPART(tz,@date))
Run Code Online (Sandbox Code Playgroud)


小智 3

DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00'

SELECT @date InputDate,
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,@date)))) ) + ' ' + RIGHT(@date,6))) StartDate,
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,DATEADD(day,1,@date))))) ) + ' ' + RIGHT(@date,6))) EndDate
Run Code Online (Sandbox Code Playgroud)