您好,可以使用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
答案 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 ?)