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或更高版本,然后可以使用format
function【参考方案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 8601 格式的优雅方法 [重复]