在我正在处理的提取中,我有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
在我正在处理的提取中,我有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
当前回答
你可以简单地把两者相加。
如果日期列的时间部分始终为零 时间列的日期部分也始终为零(基准日期:1900年1月1日)
将它们相加将返回正确的结果。
SELECT Combined = MyDate + MyTime FROM MyTable
原理(向ErikE/dnolan致敬)
它是这样工作的,因为日期存储为两个4字节 左4字节为日期,右4字节为日期的整数 4字节是时间。这就像$ 00001 + $ 00000001 = 0001美元0001
编辑关于新的SQL Server 2008类型
日期和时间是SQL Server 2008中引入的类型。如果你坚持添加,你可以使用组合= CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
关于SQL Server 2008及以上版本的准确性损失的Edit2(向Martin Smith致敬)
看看如何结合日期和时间datetime2在SQL Server?以防止精度损失使用SQL Server 2008及更高。
其他回答
这对我很有效
CAST(Tbl.date as DATETIME) + CAST(Tbl.TimeFrom AS TIME)
(适用于SQL 2008 R2)
我遇到了类似的情况,我必须将日期和时间字段合并到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
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
你可以简单地把两者相加。
如果日期列的时间部分始终为零 时间列的日期部分也始终为零(基准日期:1900年1月1日)
将它们相加将返回正确的结果。
SELECT Combined = MyDate + MyTime FROM MyTable
原理(向ErikE/dnolan致敬)
它是这样工作的,因为日期存储为两个4字节 左4字节为日期,右4字节为日期的整数 4字节是时间。这就像$ 00001 + $ 00000001 = 0001美元0001
编辑关于新的SQL Server 2008类型
日期和时间是SQL Server 2008中引入的类型。如果你坚持添加,你可以使用组合= CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
关于SQL Server 2008及以上版本的准确性损失的Edit2(向Martin Smith致敬)
看看如何结合日期和时间datetime2在SQL Server?以防止精度损失使用SQL Server 2008及更高。
简单地将两者连接起来,但首先将它们强制转换,如下所示
select cast(concat(Cast(DateField as varchar), ' ', Cast(TimeField as varchar)) as datetime) as DateWithTime from TableName;