将文本格式时间列与datetime格式日期列合并为完整时间
合并日期列与时分字符串列的解决方案
你的需求是将account_date(datetime类型,含日期+00:00:00时间)与time列(字符串格式,如"0250"表示02:50)合并为完整的datetime值,之前的代码无法生效是因为直接拼接后的字符串不符合时间转换的格式要求,以下是两种可行的解决方法:
方法一:使用DATEADD函数累加时间(推荐)
这种方法不需要拼接字符串,直接通过日期函数将小时和分钟添加到account_date上,避免格式转换可能出现的问题:
SELECT DATEADD(MINUTE, CAST(RIGHT([time], 2) AS INT), DATEADD(HOUR, CAST(LEFT([time], 2) AS INT), account_date)) AS combined_datetime FROM your_table
- 先通过
LEFT([time], 2)提取小时部分,转成整数后用DATEADD加到account_date上 - 再提取分钟部分
RIGHT([time], 2),转成整数后再次用DATEADD累加
方法二:拼接字符串后转换为datetime
先将account_date的日期部分与格式化后的时间字符串拼接,再转换为datetime类型:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), account_date, 23) + ' ' + LEFT([time], 2) + ':' + RIGHT([time], 2)) AS combined_datetime FROM your_table
CONVERT(VARCHAR(10), account_date, 23)将account_date转为"YYYY-MM-DD"格式的日期字符串LEFT([time], 2) + ':' + RIGHT([time], 2)将"0250"转为"02:50"的时间字符串- 拼接后得到"YYYY-MM-DD HH:MI"格式的字符串,再转为datetime类型
内容的提问来源于stack exchange,提问作者rhoops
相关产品推荐
相关产品推荐

