SQL - конвертировать длинное целое в дату и время - PullRequest
4 голосов
/ 15 января 2011

У меня есть база данных с датами в следующем длинном целом формате:

20100101000000

Где это будет 1 января 2010 года, 00:00:00 для времени дня.1005 *

Я хочу иметь возможность преобразовать это в обычный синтаксис SQL Datetime и обратно.Это возможно?Я могу только получить это далеко:

SELECT CAST(CURRENT_TIMESTAMP as int);

, который возвращает «40556» - не совсем то, что я после.

Ответы [ 2 ]

5 голосов
/ 15 января 2011

Вы можете использовать substring, чтобы преобразовать вашу строку в yyyy-MM-dd HH:mm:ss запись и преобразовать ее в datetime:

select  convert(datetime, 
            substring(sub.Dt,1,4) + '-' + 
            substring(sub.Dt,5,2) + '-' + 
            substring(sub.Dt,7,2) + ' ' +
            substring(sub.Dt,9,2) + ':' + 
            substring(sub.Dt,11,2) + ':' + 
            substring(sub.Dt,13,2))
from    (
        select  '20100101000000' as Dt
        ) sub
1 голос
/ 15 января 2011

Вы можете заполнить его необходимыми пробелами и двоеточиями:

select
stuff(stuff(stuff('20100101000000',9,0,' '),12,0,':'),15,0,':') STR,
convert(datetime,stuff(stuff(stuff('20100101000000',9,0,' '),12,0,':'),15,0,':')) DT;

Результат будет

STR               | DT
20100101 00:00:00 | 2010-01-01 00:00:00.000

Первый показывает строку, в которую он преобразован, второй - дата и времязначение.Обратный ход

select
convert(char(8),getdate(),112) + replace(convert(varchar(30),getdate(),108),':','');

Замените константы «20100101000000» и «getdate ()» именами полей, где это необходимо при выборе из таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...