在我正在处理的提取中,我有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

当前回答

这是一个没有任何字符转换的替代解决方案:

DATEADD(ms, DATEDIFF(ms, '00:00:00', [Time]), CONVERT(DATETIME, [Date]))

这样你只能得到毫秒的精度,但这通常是可以的。我已经在SQL Server 2008中对此进行了测试。

其他回答

另一种方法是使用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上测试

select s.SalesID from SalesTbl s 
        where cast(cast(s.SaleDate  as date) as datetime) + cast(cast(s.SaleCreatedDate as time) as datetime) between @FromDate and @ToDate

简单地将两者连接起来,但首先将它们强制转换,如下所示

select cast(concat(Cast(DateField as varchar), ' ', Cast(TimeField as varchar)) as datetime) as DateWithTime from TableName;
SELECT CAST(your_date_column AS date) + CAST(your_time_column AS datetime) FROM your_table

效果非常好

我遇到了类似的情况,我必须将日期和时间字段合并到DateTime字段。上面提到的解决方案都不行,特别是添加两个字段作为添加这两个字段的数据类型是不一样的。

我创建了下面的解决方案,其中我添加了小时和分钟部分的日期。这对我来说非常有效。请查看一下,如果遇到任何问题请告诉我。

与资源; 作为 ( select StatusTime = '12/30/1899 5:17:00 PM', StatusDate = '7/24/2019 12:00:00 AM' ) select DATEADD(MI, DATEPART(MINUTE,CAST(tbl))StatusTime AS TIME)),DATEADD(HH, DATEPART(小时,CAST(tbl))。StatusTime AS TIME)), CAST(tbl。StatusDate为DATETIME)) 从台

执行结果:2019-07-24 17:17:00.000