【问题标题】:Converting a 5 digit int into time将 5 位整数转换为时间
【发布时间】:2019-02-10 19:25:42
【问题描述】:

在旧系统(SQL Server 2005)中,我有一列将 5 位整数(即 86340)存储为时间。旧版应用程序将 86340 显示为 23:59:00。我不确定如何使用 SQL 将 5 位整数转换为日期时间数据类型。

【问题讨论】:

  • 86340等数字代表什么时间?
  • T-SQL 中的模运算符是%。不过,TIMEFROMPARTS 函数是在 SQL Server 2012 中添加的,因此您不能只根据计算的部分构建time。即使在 SQL Server 2012 中,虽然我不认为 63 分钟是可接受的分钟组件
  • @GordonLinoff 进行了编辑以反映您的问题。
  • @LukaszSzozda 我很乐意使用您的答案,但是正如另一位发帖者指出的那样,SQL Server 2005 中不存在 TIMEFROMPARTS

标签: sql tsql sql-server-2005


【解决方案1】:

SQL Server 2012+ 有TIMEFROMPARTS 函数:

TIMEFROMPARTS(时、分、秒、分数、精度)
返回指定时间和指定精度的时间值。

类似于 Excel 的TIME

TIME(时、分、秒)

Excel 版本可以处理 0-60 范围内的值:

需要分钟。一个从 0 到 32767 的数字,代表分钟。 任何大于 59 的值都将转换为小时和分钟。

而 SQL 对应物无法做到这一点。


看起来该值只是秒数,因此您可以使用:

 DECLARE @A1 INT =  86340;
 SELECT DATEADD(second, @A1,CAST('00:00:00' AS TIME));

DBFiddle Demo

编辑:

由于 SQL Server 2005 不支持 TIME 数据类型,您可以改用 DATETIME 并跳过应用程序中的日期部分。

 DECLARE @A1 INT =  86340;
 SELECT DATEADD(second, @A1,CAST('00:00:00' AS DATETIME));

DBFiddle Demo2

【讨论】:

  • 我运行了 SQL 代码,它可以工作,并且解释也有帮助,所以我将其作为公认的答案。但是,为了使它工作,我需要将 CAST 更改为 datetime 而不是 time,因为 SQL Server 2005 中不存在 time 数据类型(正如我所说的这是一个遗留系统)。如果您能更新代码示例,将不胜感激。
【解决方案2】:

由于您拥有的值是自午夜以来的秒数的整数表示形式,因此您在 SQL Server 2005 中有几个选择。您可以将该值呈现为可读的VARCHAR,也可以将其呈现为DATETIME,它附加日期信息,或者您可以从另一个字段中提取日期以获得有意义的 DATETIME 为您的价值。

SELECT CONVERT(VARCHAR(12), DATEADD(SECOND, 86340, 0), 114) AS [InVarchar];

+--------------+
|  InVarchar   |
+--------------+
| 23:59:00:000 |
+--------------+


SELECT DATEADD(SECOND, 86340, 0) AS [InDatetime];

+-------------------------+
|       InDatetime        |
+-------------------------+
| 1900-01-01 23:59:00.000 |
+-------------------------+

SELECT DATEADD(SECOND, 86340, CAST('2018-09-05' AS DATETIME)) AS [InDatetimeWithDate];

+-------------------------+
|   InDatetimeWithDate    |
+-------------------------+
| 2018-09-05 23:59:00.000 |
+-------------------------+

【讨论】:

    【解决方案3】:

    使用下面的查询:

    SELECT CONVERT(DATETIME, @Column_Name)
    FROM Table;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多