TSQL datetimeofset没有秒

时间:2018-12-19 08:06:00

标签: tsql

您好,可以使用datetimeoffset但秒数和小数均设置为0吗?我想出了这个解决方案,但是看起来有点复杂。我需要先将秒数设置为 dt2 后将其设置为0。  我觉得应该更好。全部发送。

declare @dt datetimeoffset = '2018-12-18 23:49:18.8866667 +00:00'  --getdate();
-- select @dt       --2018-12-18 23:49:18.8866667 +00:00

select @dt, 
datepart(ss,@dt) Sec,
datepart(ns,@dt) nSec,
dateadd(ns,-(datepart (ns,@dt)),@dt)  ns0,
dateadd(ss,-(datepart (ss,@dt)),@dt)  ss0,
 dateadd(ss,-(datepart (ss,dateadd(ns,-(datepart (ns,@dt)),@dt))),dateadd(ns,-(datepart (ns,@dt)),@dt))  dt0

--                                dt0
-- 2018-12-18 23:49:00.0000000 +00:00

1 个答案:

答案 0 :(得分:1)

不确定您使用的是哪个版本的SQL,但是这里有几个选项(不确定性能):

declare @dt datetimeoffset = '2018-12-18 23:49:18.8866667 +01:00' 

select 
    @dt as dt
    ,cast(convert(varchar, @dt, 100) as datetimeoffset) as dt0                                          -- pre-sql2012:  if you do not mind casting to varchar first (performance ?)
    ,switchoffset(cast(convert(smalldatetime, @dt) as datetimeoffset), datepart(tzoffset, @dt)) as dt1  -- pre-sql2012:  if the TZ matters 
    ,cast(cast(@dt as smalldatetime) as datetimeoffset) as  dt2                                         -- pre-sql2012:  if the TZ offset does not matter 
    ,cast(format(@dt, 'yyyy-MM-dd HH:mm zzz') as datetimeoffset) as dt3                                 -- sql2012 onwards   (performance ?)