SQL拼接日期列与时间列为datetime类型报错,求解决方案
解决SQL日期与时间拼接转datetime的报错问题
报错原因
你使用FORMAT函数生成的日期字符串格式为yyyy:MM:dd(例如2022:08:27),这种带冒号分隔的日期格式无法被SQL Server的CONVERT(datetime, ...)识别,导致转换失败。
解决方案
根据你的数据类型,推荐以下几种高效的实现方式:
1. 原生date + time类型直接相加(最优解)
如果你的日期列是date类型、时间列是time类型,无需字符串拼接,直接相加即可得到datetime类型:
SELECT CAST(DateColumn AS DATETIME) + CAST(TimeColumn AS DATETIME) AS CombinedDatetime FROM YourTable
2. 字符串类型日期/时间的正确拼接转换
如果是字符串类型的日期或时间值,需要生成SQL Server可识别的标准日期时间字符串(yyyy-MM-dd hh:mm:ss)再转换:
-- 用你的测试值示例 SELECT CONVERT(DATETIME, FORMAT(CONVERT(DATETIME, '2022-08-27 01:00:00.000'), 'yyyy-MM-dd') + ' ' + FORMAT(CONVERT(DATETIME, '2022-08-27 12:01:30.000'), 'hh:mm:ss') ) AS CombinedDatetime
这里将日期格式从yyyy:MM:dd改为yyyy-MM-dd,拼接后的字符串符合SQL Server的datetime转换规则。
3. 用CONVERT替代FORMAT(性能更优)
FORMAT函数性能较差,推荐使用CONVERT指定格式代码来生成标准字符串:
-- 测试示例 SELECT CONVERT(DATETIME, CONVERT(VARCHAR, CONVERT(DATETIME, '2022-08-27 01:00:00.000'), 23) + ' ' + CONVERT(VARCHAR, CONVERT(DATETIME, '2022-08-27 12:01:30.000'), 108) ) AS CombinedDatetime
- 格式代码
23对应yyyy-MM-dd - 格式代码
108对应hh:mm:ss
内容的提问来源于stack exchange,提问作者Sumit Manandhar
相关产品推荐
相关产品推荐

