T-SQL - 将日期时间转换为未分隔的 ISO 值

T-SQL - Convert datetime to unseparated ISO value

我正在尝试将以下 DATETIME 转换为 ISO 格式:

-- Today's Date
2018-04-16 2:04PM

我计划将其解析为 charNVARCHAR 以便我可以将其连接为字符串的一部分。

期望的结果应该是:

-- Date and time unseparated
20180416140422

经过一些研究,我发现 here

CONVERT(datetime, GETDATE(), 112)

使用 112 格式代码应该可以得到我想要的格式,但不知何故我得到了以下示例输出:

--Formatted using 112 format
Apr 16 2018 2:04PM

这是为什么?我只是想格式化 DATETIME 不分隔的对象。

此外,无论有没有时间标记到最后,我将如何做到这一点?

使用 SQL 服务器 2008R2

应该是:

select CONVERT(varchar(20), GETDATE(), 112)

输出

20180416

如果你同时想要日期和时间,那么可以尝试使用这个:

select CONVERT(varchar(20), GETDATE(), 112) + replace(CONVERT(varchar(20), GETDATE(), 108), ':', '')

输出

20180416193327

看看这个:

SELECT CONVERT(varchar(20), GETDATE(), 112) AS ISODate
  , CONVERT(varchar(50), GETDATE(), 126) AS ISOWithTime_WorksWithAnyLanguageSetting;

我相信列的名称是不言自明的。

输出示例:

ISODate     | ISOWithTime_WorksWithAnyLanguageSetting
------------------------------------------------------
20180416    | 2018-04-16T15:26:50.607

有关带有示例的 CONVERT 函数的更多格式的信息,请查看 this source

类似于:

--20180416152520
SELECT REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), GETDATE(), 121), '-', ''), ':', ''), ' ', '') AS DesiredFormat

输出:

20180416152520

当您只需要 format():

时,这些似乎都过于繁琐了
select format(getdate(), 'yyyyMMddHHmmss') as ISODateTime;