【问题标题】:How do I combine data from two DateTime columns (SQL Server)?如何合并来自两个 DateTime 列 (SQL Server) 的数据?
【发布时间】:2010-12-25 19:49:20
【问题描述】:

使用 SQL Server 2005,我正在使用一个数据库,该数据库有两列来跟踪本质上是一个 DateTime 的内容(我终其一生都无法弄清楚为什么有人会认为这是一个好的主意)。

基本上,一列,我们称之为 OrderDate,包含这样的 DateTime:2008-02-29 00:00:00.000,而另一列 OrderTime 包含这样的日期时间:1900-01-01 11:15 :00.000

所以,现在每当我想在一个地方显示整个日期和时间时,我都不得不将这两者结合起来。从 UI 的角度来看,这很容易,但我将如何在数据库级别执行此操作?我希望能够编写一个查询,在这两列的组合日期和时间之间找到一个 DATEDIFF,并将其与另一个 DateTime 值进行比较。

例如:

SELECT DATEDIFF(mi, CompletionTime, OrderTime) AS TurnAroundTime FROM SomeRecord

上面的问题当然是 OrderTime 的日期组件是 1900-01-01,导致结果略微倾斜...

【问题讨论】:

    标签: sql-server datetime concatenation


    【解决方案1】:

    创建一个将它们相加的计算列

      Alter Table TableName Add CompleteDate as DateOnlyColName + TimeOnlyColName
    

    为确保不会无意中添加 DateOnlyColName 中的错误时间数据,请改用它...

      Alter Table TableName Add CompleteDate as 
             DateAdd(day, DateDiff(day, 0, DateOnlyColName), 0) + 
                          TimeOnlyColName
    

    【讨论】:

      【解决方案2】:

      在 SQL 中使用“OrderDate + OrderTime”创建“OrderDateTime”。或者定义一个计算列。

      我敢肯定,SQL 标准支持对日期时间的标准添加,并且 SQL Server 实现了它。

      There is an example in BOL

      【讨论】:

      • 不过,我还要补充一点,他应该绝对确定这两列永远不会分别包含日期或时间以及时间或日期的“片段”。例如,他能确定他永远不会在 OrderTime 中看到“1992-01-01 11:15:00.000”吗?在这种情况下,我建议在 calc'd 列中使用 DATEPART() 进行一些计算。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多