You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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):得到日期部分20180416
  • CONVERT(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:24:23