将5位数的int转换为时间

时间:2018-09-05 15:23:34

标签: sql tsql sql-server-2005

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

3 个答案:

答案 0 :(得分:2)

SQL Server 2012+具有TIMEFROMPARTS功能:

  

时间段(小时,分钟,秒,分数,精度)
  返回指定时间和指定精度的时间值。

与Excel的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

答案 1 :(得分:0)

由于您拥有的值是从午夜开始的秒数的整数表示,因此在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 |
+-------------------------+

答案 2 :(得分:-1)

在查询下面使用:

SELECT CONVERT(DATETIME, @Column_Name)
FROM Table;