结合日期时间 + 字符串以制作适当的日期时间

4 sql-server datetime

我需要取一DATETIME列 ( Column A) 只包含一个日期,然后添加一VARCHAR(5)列 ( Column B),其中包含一个时间的 24 小时表示形式(即1330),并将它们组合起来以获得DATETIME可在DATEDIFF命令中使用的有效值。

例如,Column Acontains2013-07-01 00:00:00.000Column Bcontains 1330。结果应该是2013-07-01 13:30:00.000

编辑:只是为了澄清事情,这是一个以这种方式存储数据的现有数据库,完全改变事物的工作方式以使其以适当的方式存储数据超出了我的项目范围。如果可以,我会,但我不能,所以我被多列困住了。此外,B 列中的数据将始终为 4 位时间,因为输入页面会进行检查以确保时间是有效的军事时间格式。

Aar*_*and 6

这也将处理没有全部 4 位数字的 <10 AM 的值。(此外,该列可能应该是 CHAR(4) 而不是 VARCHAR(5) - 或者更好的是,停止将它们分开并首先存储正确的日期时间值)。

DECLARE @t TABLE(ColumnA DATETIME, ColumnB VARCHAR(5));

INSERT @t VALUES('20130701', '1330'),('20130701', '930');

SELECT CONVERT(DATETIME, CONVERT(CHAR(8), ColumnA, 112) 
    + ' ' + LEFT(RIGHT('0' + ColumnB, 4),2) 
    + ':' + RIGHT(ColumnB, 2))
FROM @t;
Run Code Online (Sandbox Code Playgroud)