T-SQL技术问题:如何将Datetime转换为无分隔符ISO格式值
解决SQL Server日期时间转无分隔符ISO格式的问题
嘿,我懂你碰到的这个坑——本来想把日期时间转成无分隔符的YYYYMMDDHHMMSS格式用来拼接字符串,结果用了CONVERT(datetime, GETDATE(), 112)却得到了Apr 16 2018 2:04PM这种奇怪的输出,对吧?
问题出在哪?
你搞反了CONVERT的参数逻辑,而且用错了目标数据类型:
CONVERT的语法是CONVERT(目标数据类型, 要转换的值, 格式代码),你把目标类型写成datetime了——datetime类型本身没有固定的字符串格式,你看到的Apr 16...其实是SQL客户端(比如SSMS)自动给的显示格式,不是实际生成的字符串。- 另外,格式代码112只会返回日期部分(
YYYYMMDD),不包含时间,这也满足不了你要完整日期时间的需求。
正确的解决方法
这里给你两种靠谱的方案,任选其一即可:
方案1:用CONVERT拆分拼接(兼容所有SQL Server版本)
先分别转日期和时间部分,再拼接成无分隔符的字符串:
-- 输出格式:YYYYMMDDHHMMSS SELECT CONVERT(NVARCHAR(8), GETDATE(), 112) + REPLACE(CONVERT(NVARCHAR(8), GETDATE(), 108), ':', '')
CONVERT(NVARCHAR(8), GETDATE(), 112):得到日期部分20180416CONVERT(NVARCHAR(8), GETDATE(), 108):得到时间部分14:04:22,用REPLACE去掉冒号后变成140422- 两者拼接就得到你要的
20180416140422
方案2:用FORMAT函数(SQL Server 2012及以上版本)
如果你的SQL Server版本支持,用FORMAT会更直观,直接指定格式字符串就行:
-- 输出格式:YYYYMMDDHHMMSS SELECT FORMAT(GETDATE(), 'yyyyMMddHHmmss')
这个函数可以直接按照你想要的格式生成字符串,不需要额外拼接,代码更简洁。
验证你的示例
针对你给出的时间2018-04-16 2:04PM,用上面任意一种方法都会输出20180416140422,完全符合你的期望。
内容的提问来源于stack exchange,提问作者Master Yoda
相关产品推荐
相关产品推荐

