在遗留系统(SQL Server 2005)中,我有一个列,它存储一个5位整数(即86340)作为时间。遗留应用程序显示86340为23:59:00。我不确定如何使用SQL将该5位整数转换为日期时间数据类型。
SQL Server 2012+具有TIMEFROMPARTS
功能:
TIMEFROMPARTS(小时,分钟,秒,分数,精度) 返回指定时间和指定精度的时间值。
这与Excel qazxsw poi类似:
时间(小时,分钟,秒)
Excel版本可以处理0-60范围内的值:
需要分钟。代表分钟的0到32767之间的数字。任何大于59的值都将转换为小时和分钟。
和SQL对手不能那样做。
看起来该值只是秒数,因此您可以使用:
TIME
DECLARE @A1 INT = 86340;
SELECT DATEADD(second, @A1,CAST('00:00:00' AS TIME));
编辑:
由于SQL Server 2005不支持DBFiddle Demo数据类型,您可以使用TIME
代替并在应用程序中跳过日期部分。
DATETIME
DECLARE @A1 INT = 86340;
SELECT DATEADD(second, @A1,CAST('00:00:00' AS DATETIME));
由于您拥有的值是自午夜以来秒的整数表示,因此您在SQL Server 2005中有几个选项。您可以将值呈现为DBFiddle Demo2,这是可读的,您可以将其呈现为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 |
+-------------------------+