将5位数字int转换为时间

问题描述 投票:0回答:3

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

sql tsql sql-server-2005
3个回答
2
投票

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));


0
投票

由于您拥有的值是自午夜以来秒的整数表示,因此您在SQL Server 2005中有几个选项。您可以将值呈现为DBFiddle Demo2,这是可读的,您可以将其呈现为VARCHAR,它附加了日期信息,或者您可以从其他字段中提取日期以获得有价值的DATETIME

DATETIME

-1
投票

使用以下查询:

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 |
+-------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.