首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将一个字段中的日期与另一个字段中的时间合并- MS SQL Server

如何将一个字段中的日期与另一个字段中的时间合并- MS SQL Server
EN

Stack Overflow用户
提问于 2009-03-31 16:46:20
回答 20查看 395K关注 0票数 222

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

如何查询该表以将这两个字段合并为1个datetime类型的列

日期

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
EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2009-03-31 08:54:03

您可以简单地将这两个相加。

  • if Date列的Time part始终为零,Date part列的Time也始终为零(基准日期:1900年1月1日)

将它们相加将返回正确的结果。

SELECT Combined = MyDate + MyTime FROM MyTable

基本原理(kudos to ErikE/dnolan)

它的工作原理是这样的,因为日期被存储为两个4字节的Integers,左边4个字节是date,右边4个字节是time。这就像做$0001 0000 + $0000 0001 = $0001 0001一样

编辑有关新的SQL Server 2008类型

DateTimeSQL Server 2008中引入的类型。如果您坚持要添加,您可以使用Combined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)

关于SQL Server2008和更高版本中的精度损失的Edit2 (马丁·史密斯的荣誉)

了解一下使用SQL Server2008及更高版本时防止精度损失的How to combine date and time to datetime2 in SQL Server?

票数 270
EN

Stack Overflow用户

发布于 2009-03-31 08:53:34

如果date列的time元素和time列的date元素都为零,那么就需要Lieven's answer。如果你不能保证情况总是如此,那么它就会变得稍微复杂一些:

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
票数 141
EN

Stack Overflow用户

发布于 2011-11-30 23:58:41

这是一个不需要任何字符转换的替代解决方案:

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

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

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/700619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档