我需要获取 ISO 8601 格式的当前日期,不带毫秒。
learn microsoft 的注释 6 声明了样式 127:
如果毫秒 (mmm) 值为 0,则不会显示毫秒小数部分值。例如,值 2022-11-07T18:26:20.000 显示为 2022-11-07T18:26:20。我有以下疑问:
select
getdate() as current_datetime,
datepart(millisecond, getdate()) as ms_of_current_dt,
dateadd(millisecond, -datepart(millisecond, getdate()), getdate()) as current_dt_without_ms,
convert(varchar, dateadd(millisecond, -datepart(millisecond, getdate()), getdate() at time zone 'Central European Standard Time'), 127) as current_dt_as_iso8601
它并不总是有效:
.001
毫秒。我能做什么?我觉得
datepart()
太准确了。是否有一个函数可以将当前日期和时间返回为
datetime2
?
SYSDATETIME()
的信息,我能够用这个查询解决它:
select convert(varchar(20), dateadd(nanosecond, -datepart(nanosecond, sysdatetime()), sysdatetime() at time zone 'Central European Standard Time'), 127) as current_dt_as_iso8601
附加信息:at time zone 'Central European Standard Time'
是必要的,否则最后不会得到
Z
。其他情况可能需要调整时区。
CONVERT
改为适当长度的
SYSUTCDATETIME
到适当的样式;分别是
varchar
和
19
。然后你可以在末尾连接
127
:
Z