【问题标题】:How to combine separate Date and Time columns into DateTime?如何将单独的日期和时间列组合成日期时间?
【发布时间】:2014-09-10 15:46:48
【问题描述】:

我有一个客户数据库,其中 LMD(上次修改日期)数据类型是日期,LMT(上次修改时间)数据类型是 int。我需要从此 LMD 和 LMT 列创建一个日期时间。这是行,

LMD          LMT
2014-09-03  172351

【问题讨论】:

  • 是 17:23:51 吗? hh:mm:ss?
  • 不确定,但我想是的?

标签: sql sql-server sql-server-2012


【解决方案1】:

您可以使用除法和取模来提取 DATEADD 所需的部分

declare @datefield date
declare @timefield int

set @datefield='20140910'
set @timefield=121314

Select CAST(@datefield AS DATETIME) + DATEADD(HOUR,@timefield/10000,0) + DATEADD(MINUTE,@timefield/100 % 100,0)+ DATEADD(SECOND,@timefield % 100,0)


Select CAST(LMD AS datetime) + DATEADD(HOUR,LMT/10000,0) + DATEADD(MINUTE,LMT/100 % 100,0)+ DATEADD(SECOND,LMT % 100,0), LMT, LMD
FROM MyTable

【讨论】:

    【解决方案2】:

    这可以使用TIMEFROMPARTS 并将其添加到日期中。

    SQL Fiddle Demo

    select cast(LMD as datetime) + cast(timefromparts(substring(cast(lmt as varchar), 1, 2), substring(cast(lmt as varchar), 3, 2), substring(cast(lmt as varchar), 5, 2),0,0) as datetime)
    from yourTable
    

    【讨论】:

      【解决方案3】:

      如果 LMD 是日期并且 LMT 是 int:

      SELECT 
          DATETIMEFROMPARTS(
              YEAR(LMD), 
              MONTH(LMD), 
              DAY(LMD), 
              (LMT / 10000) % 100, 
              (LMT / 100) % 100, 
              LMT % 100, 0
          )
      

      【讨论】:

      • 获取Argument data type int is invalid for argument 1 of substring function.
      猜你喜欢
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2013-11-29
      • 2019-10-28
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多