将 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));
编辑:
由于 SQL Server 2005 不支持 TIME
数据类型,您可以改用 DATETIME
并跳过应用程序中的日期部分。
DECLARE @A1 INT = 86340;
SELECT DATEADD(second, @A1,CAST('00:00:00' AS DATETIME));
由于您拥有的值是自午夜以来的秒数的整数表示,因此您在 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 |
+-------------------------+
在遗留系统 (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));
编辑:
由于 SQL Server 2005 不支持 TIME
数据类型,您可以改用 DATETIME
并跳过应用程序中的日期部分。
DECLARE @A1 INT = 86340;
SELECT DATEADD(second, @A1,CAST('00:00:00' AS DATETIME));
由于您拥有的值是自午夜以来的秒数的整数表示,因此您在 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 |
+-------------------------+