在我正在处理的提取中,我有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
当前回答
这是一个没有任何字符转换的替代解决方案:
DATEADD(ms, DATEDIFF(ms, '00:00:00', [Time]), CONVERT(DATETIME, [Date]))
这样你只能得到毫秒的精度,但这通常是可以的。我已经在SQL Server 2008中对此进行了测试。
其他回答
如果日期列的时间元素和时间列的日期元素都为零,那么Lieven的答案就是您所需要的。如果你不能保证情况总是如此,那么事情就会变得稍微复杂一些:
SELECT DATEADD(day, 0, DATEDIFF(day, 0, your_date_column)) +
DATEADD(day, 0 - DATEDIFF(day, 0, your_time_column), your_time_column)
FROM your_table
SELECT CAST(your_date_column AS date) + CAST(your_time_column AS datetime) FROM your_table
效果非常好
如上所述,我有很多错误,所以我这样做
try_parse(concat(convert(date,Arrival_date),' ',arrival_time) as datetime) AS ArrivalDateTime
这对我很管用。
将存储在datetime字段中的第一个日期转换为字符串,然后将存储在datetime字段中的时间转换为字符串,附加两个日期并转换回datetime字段,所有这些都使用已知的转换格式。
Convert(datetime, Convert(char(10), MYDATETIMEFIELD, 103) + ' ' + Convert(char(8), MYTIMEFIELD, 108), 103)
结合日期从一个datetime列和时间从另一个datetime列,这是最好的,最快的解决方案为您:
select cast(cast(DateColumn as date) as datetime) + cast(TimeColumn as datetime) from YourTable