Я хочу конвертировать 20080910173240 в 2008-09-10T17: 32: 40.000 + 0000 на сервере SQL - PullRequest
0 голосов
/ 20 февраля 2019

Я попробовал приведенную ниже команду, но получил некоторую ошибку:

SELECT convert(datetime,CONVERT(varchar(10),20080910173240,127))

Ошибка: сообщение 8115, уровень 16, состояние 5, строка 7 Ошибка арифметического переполнения при преобразовании чисел в тип данных varchar.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Другое решение с DATETIMEFROMPARTS без использования строковых функций:

DECLARE @MyAwkwardDateTime BIGINT = 20080910173240

SELECT
    GeneratedDateTime = DATETIMEFROMPARTS(
        T.Year,
        T.Month,
        T.Day,
        T.Hour,
        T.Minute,
        T.Second,
        0)
FROM
    (
    SELECT
        Year = CONVERT(INT, @MyAwkwardDateTime / 10000000000),
        Month = @MyAwkwardDateTime / 100000000 % 100,
        Day = @MyAwkwardDateTime / 1000000 % 100,
        Hour = @MyAwkwardDateTime / 10000 % 100,
        Minute = @MyAwkwardDateTime / 100 % 100,
        Second = @MyAwkwardDateTime % 100
    ) AS T

Результат:

GeneratedDateTime
2008-09-10 17:32:40.000

Нет необходимости в подзапросе, я просто использовал его, чтобы его было легче видеть каждый разчасть.

0 голосов
/ 20 февраля 2019

Вы можете использовать это.Это просто отформатирует ваш номер по мере необходимости.

SELECT FORMAT(20080910173240, '####-##-## ##:##:##')

Это также преобразует в формат даты.

SELECT Convert(datetime, FORMAT(20080910173240, '####-##-## ##:##:##'), 101);

Вывод будет 2008-09-10 17: 32: 40.000

0 голосов
/ 20 февраля 2019

Я думаю, что вопрос все еще имеет право на ответ ... Довольно часто системы DWH хранят дату в виде числового значения.FORMAT можно использовать, чтобы применить маску поверх чисел, чтобы вернуть ее к дате и времени, которые SQL Server понимает

-- 2008-09-10 17:32:40.000
SELECT CAST(FORMAT(20080910173240, '####-##-## ##:##:##') AS DATETIME)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...