Преобразование 5-значного int во время - PullRequest
0 голосов
/ 05 сентября 2018

В устаревшей системе (SQL Server 2005) у меня есть столбец, в котором в качестве времени хранится 5-значное целое число (т.е. 86340). Устаревшее приложение показывает 86340 как 23:59:00. Я не уверен, как перевести это 5-значное целое число в тип данных дата-время, используя SQL.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

SQL Server 2012+ имеет TIMEFROMPARTS функцию:

TIMRROMPARTS (час, минуты, секунды, доли, точность)
Возвращает значение времени для указанного времени и с указанной точностью.

Что похоже на Excel TIME:

ВРЕМЯ (часы, минуты, секунды)

Версия Excel может обрабатывать значения в диапазоне 0-60:

Требуется минута. Число от 0 до 32767, обозначающее минуты. Любое значение больше 59 будет преобразовано в часы и минуты.

И SQL-аналог не может этого сделать.


Похоже, это значение просто количество секунд, поэтому вы можете использовать:

 DECLARE @A1 INT =  86340;
 SELECT DATEADD(second, @A1,CAST('00:00:00' AS TIME));

Демонстрация DBFiddle

EDIT:

Поскольку SQL Server 2005 не поддерживает тип данных TIME, вы можете использовать вместо него DATETIME и пропустить часть даты в приложении.

 DECLARE @A1 INT =  86340;
 SELECT DATEADD(second, @A1,CAST('00:00:00' AS DATETIME));

DBFiddle Demo2

0 голосов
/ 05 сентября 2018

Поскольку у вас есть целочисленное представление секунд с полуночи, у вас есть несколько вариантов в 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 |
+-------------------------+
0 голосов
/ 05 сентября 2018

ИСПОЛЬЗУЙТЕ ниже запроса:

SELECT CONVERT(DATETIME, @Column_Name)
FROM Table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...