SSMS 2012: преобразование DATETIME в серийный номер Excel

Кажется, я нигде не могу найти ответ на этот вопрос - я хочу преобразовать дату и время в SQL в серийный номер Excel.

По сути, я ищу функцию DATEVALUE из Excel, но для использования в SQL

Есть идеи, как это сделать? Спасибо

4 ответа

Решение

Предполагая, что желаемая дата 2016-05-25

Select DateDiff(DD,'1899-12-30','2016-05-25')

Возвращает

 42515

Если вы хотите часть времени, а также

Declare @Date datetime = '2016-05-25 20:00'
Select DateDiff(DD,'1899-12-30',@Date)+(DateDiff(SS,cast(@Date as Date),@Date)/86400.0)

Возвращает

42515.8333333

Я столкнулся с этой проблемой и нашел, что наиболее элегантным решением будет следующее (как уже упоминалось, добавление +2 необходимо из-за различий между датами SQL и Excel):

Предполагая, что "Столбец" является DateTimeOffset:

      SELECT CAST(CAST(COLUMN_TO_BE_CONVERTED as datetime)+2 as float) as EXCEL_DATE_FLOAT

Если столбец еще не является DateTimeOffset, а является просто DateTime, вам не понадобится двойное приведение; вам просто нужно что-то вроде:

      SELECT CAST(COLUMN_TO_BE_CONVERTED+2 as float) as EXCEL_DATE_FLOAT

Результирующее значение с плавающей запятой в любом случае — это то, что Excel распознает как дату и время, и вы можете легко извлечь оттуда то, что вам нужно. После ручной проверки результатов в Excel я подтвердил, что серийные номера точно соответствуют дате и времени, как я и ожидал.

Вам просто нужно конвертировать ваши datetime значение для int и добавить 1:

SELECT CONVERT(INT,YourDate) + 1
FROM dbo.SomeTable;

С сопоставлением: SQL_Latin1_General_CP1_CI_AS

ты должен использовать

Select DateDiff(DD,'18991230','20160525')

Возвращает 42515

Вы можете заменить '20160525' на getdate() или поле даты

Другие вопросы по тегам