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

Posted

技术标签:

【中文标题】T-SQL - 将日期时间转换为未分隔的 ISO 值【英文标题】:T-SQL - Convert datetime to unseparated ISO value 【发布时间】:2018-04-16 13:17:07 【问题描述】:

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

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

我计划将其解析为 char 值作为 NVARCHAR,以便我可以将其连接为字符串的一部分。

期望的结果应该是:

-- Date and time unseparated
20180416140422

经过一番研究,我发现here

CONVERT(datetime, GETDATE(), 112)

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

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

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

另外,无论是否将时间标记到末尾,我将如何执行此操作?

使用 SQL Server 2008R2

【问题讨论】:

如果您正在执行诸如将其转换为 varchar 之类的操作,您的代码将返回该信息。但只是发布的查询不会返回该格式。 谢谢肖恩,看来是数据类型的简单更改解决了我的问题:) 【参考方案1】:

应该是:

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

输出

20180416

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

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

输出

20180416193327

【讨论】:

谢谢,您完全正确,因为将转换后的数据类型从 datetime 切换为 varchar 已经解决了问题。不过还有一个问题。 112 非常适合日期,但我如何在最后标记时间? 好的答案+1,但明天你的输出将不正确,因为你的答案:)【参考方案2】:

类似:

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

输出:

20180416152520

【讨论】:

为什么要使用 121 并剪掉一些东西,当你可以使用 112 并且它已经是正确的格式时?要达到相同的结果,需要做很多额外的工作 也许是因为 112 减少了一个时间部分,@MasterYoda 也需要它 谢谢亚历山大。我曾希望可能存在一种保留时间部分的现有格式,但这同样有效:) 我建议仍然考虑格式:126,因为这是 SQL Server 的区域独立标准 或升级到SQL Server 2012或更高版本,然后可以使用formatfunction【参考方案3】:

看看这个:

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。

【讨论】:

【参考方案4】:

当您只需要format() 时,这些都显得有点过于繁琐:

select format(getdate(), 'yyyyMMddHHmmss') as ISODateTime;

【讨论】:

以上是关于T-SQL - 将日期时间转换为未分隔的 ISO 值的主要内容,如果未能解决你的问题,请参考以下文章

将日期转换为 ISO 星期日期

如何正确地将数据帧的所有日期时间列转换为 iso 格式

一种将当前日期时间转换为 ISO 8601 格式的优雅方法 [重复]

将 ISO 8601 日期时间字符串转换为 **Date** 对象时,如何将日期时间重新定位到当前时区?

Swift:将 ISO8601 转换为日期

Oracle 将 ISO 日期转换为计算机区域设置日期/时间