无需毫秒即可获得 ISO 8601

问题描述 投票:0回答:2

我需要获取 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
它并不总是有效:

当前日期时间ms_of_current_dtcurrent_dt_without_ms当前_dt_as_iso86012024-09-25 17:01:21.6976962024-09-25 17:01:21.0002024-09-25T15:01:21.001Z
有时我会得到

.001

 毫秒。

我能做什么?我觉得

datepart()

太准确了。是否有一个函数可以将当前日期和时间返回为 
datetime2

sql-server
2个回答
0
投票
有了

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
。其他情况可能需要调整时区。


0
投票
只需将当前的

CONVERT

改为适当长度的
SYSUTCDATETIME
到适当的样式;分别是
varchar
19
。然后你可以在末尾连接
127
Z


© www.soinside.com 2019 - 2024. All rights reserved.