在我正在处理的提取中,我有2个datetime列。一列存储日期,另一列存储如下所示的时间。

如何查询表,将这两个字段组合成类型为datetime的1列?

日期

2009-03-12 00:00:00.000
2009-03-26 00:00:00.000
2009-03-26 00:00:00.000

1899-12-30 12:30:00.000
1899-12-30 10:00:00.000
1899-12-30 10:00:00.000

当前回答

将两个字段转换为DATETIME:

SELECT CAST(@DateField as DATETIME) + CAST(@TimeField AS DATETIME)

如果你正在使用Getdate(),首先使用这个:

DECLARE @FechaActual DATETIME = CONVERT(DATE, GETDATE());
SELECT CAST(@FechaActual as DATETIME) + CAST(@HoraInicioTurno AS DATETIME)

其他回答

这对我很有效

CAST(Tbl.date as DATETIME) + CAST(Tbl.TimeFrom AS TIME)

(适用于SQL 2008 R2)

另一种方法是使用CONCATand CAST,请注意,需要使用DATETIME2(x)才能使其工作。你可以将x设置为0- 7,7之间的任何值,这意味着没有精度损失。

DECLARE @date date = '2018-03-12'
DECLARE @time time = '07:00:00.0000000'
SELECT CAST(CONCAT(@date, ' ', @time) AS DATETIME2(7))

返回2018-03-12 07:00:00.0000000

在SQL Server 14上测试

这是我的解决方案,它忽略了时间列的日期值

CAST(Tbl.date as DATETIME) + CAST(CAST(Tbl.TimeFrom AS TIME) as DATETIME)

希望这能帮助到其他人

SELECT (CAST(@TimeField As Date) As DateTime) + CAST(CAST(@TimeField As Time) As DateTime)

如果两个字段都是datetime,那么简单地添加它们就可以了。 例如: 声明@d datetime, @t datetime Set @d = '2009-03-12 00:00:00.000'; Set @t = ' 189-12-30 12:30:00.000'; 选择@d + @t 如果您使用Date & Time数据类型,则只需将时间转换为datetime 例如: 声明@d日期,@t时间 Set @d = '2009-03-12'; Set @t = '12:30:00.000'; 选择@d + cast(@t as datetime)