将 5 位整数转换为时间

Converting a 5 digit int into time

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

使用以下查询:

SELECT CONVERT(DATETIME, @Column_Name)
FROM Table;

SQL Server 2012+ 具有 TIMEFROMPARTS 功能:

TIMEFROMPARTS ( hour, minute, seconds, fractions, precision )
Returns a time value for the specified time and with the specified precision.

类似于 Excel 的 TIME:

TIME(hour, minute, second)

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

Minute Required. A number from 0 to 32767 representing the minute. Any value greater than 59 will be converted to hours and minutes.

而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 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 |
+-------------------------+