2014-12-16 3 views
0

У меня есть простой запрос, в котором я пытаюсь использовать этот оператор select.TSQL Datediff из строки

Я пытаюсь получить разницу в секундах от указанной даты (отметка времени UNIX).

select 
    DATEDIFF(s, '19700101', CAST(CAST('2014-08-27 08:59:56.0000000' AS DATETIME) AS INT)) 

Когда я пытаюсь это, я получаю следующее сообщение об ошибке:

Конверсия удалось при преобразовании даты и времени, или из строки символов.

Я понял, что литье строки, как datetime, разрешило бы это?

+0

Не могли бы вы сказать, является ли «19700101» на самом деле датой 01 января 1970 года? –

ответ

1

Прежде всего, вы должны стараться избегать использования сокращений для датыpart, вместо s, использовать SECOND. Еще одна хорошая практика при отливке строки до даты - использовать CONVERT, чтобы вы могли указать формат, который будет использоваться при конвертации (в вашем случае это будет 121. Наконец, для всего, что нужно для работы, вам нужно будет (до 3):

DECLARE @Date VARCHAR(50) 
SET @Date = '2014-08-27 08:59:56.0000000' 

SELECT DATEDIFF(SECOND,'19700101',CONVERT(DATETIME,LEFT(@Date,23),121))