Преобразование серийного номера в дату - PullRequest
2 голосов
/ 09 сентября 2010

В листе Excel я получу данные, которые, в свою очередь, мне нужно загрузить их на сервер SQL, а затем реализовать логику.

Я получил поле даты --[Due Date] как число, например: -.40317. В Excel, если вы щелкните правой кнопкой мыши, а затем отформатировать его в дату. Это покажет правильную дату как 19.05.2010.

Итак, после загрузки файла как есть. Я использовал,

SELECT (dateAdd(day,[Due Date],'1900-01-01')) FROM table1.

Предполагая, что Excel считает дни с 01-01-1900. Поэтому я добавляю число --[Due Date], которое должно дать мне правильную форматированную дату ..

Но это возвращает мне значение 2010-05-21 00:00:00.000.

Не могли бы вы мне помочь, если предположить, что Excel считает от 01-01-1900 неправильно, или процедура, которую я использовал, неверна, чтобы дать такое значение.

Ответы [ 5 ]

4 голосов
/ 09 сентября 2010

Я задал похожий вопрос некоторое время назад - речь шла не об Excel, а о VB6, поэтому я не предлагаю этот вопрос дублировать.Однако ответ, я думаю, тот же.

Дата 0 в SQL - 01.01.1900.Дата 0 в VB6 - 30/12/1899, 2 дня назад - это объясняет разницу.Поэтому я считаю, что Excel - это то же самое.

В Excel я ввел 0 в ячейку и отформатировал ячейку как дату - что отображало (странно ИМО) 01.01.1900.Я быстро посмотрел, чтобы найти другую ссылку, которая отвечает на этот вопрос окончательно, но мне не удалось найти ее.

Редактировать: Потянув ссылки, которые были даны мне в моем вопросе (которые относятся к Excel):http://www.ozgrid.com/forum/showthread.php?t=46561
http://www.joelonsoftware.com/items/2006/06/16.html

1 голос
/ 23 августа 2014

Вам нужно вычесть два дня из «числа даты Excel», чтобы преобразовать его в «дату MS SQL».

select dateadd(day,-2, 36526)

Пояснение:

Excel использует 0-янв-1900 в качестве даты начала, в то время как сервер SQL использует 1-янв-1900, поэтому для преобразования даты Excel в дату MS SQL вы можете сделать что-то вроде этого

 select dateadd(day,-1, 36526)

Но подождите, более ранняя версия Excel содержит ошибку и вычисляет 1900 как високосный год, но на самом деле это был не високосный год. Текущая версия все еще рассчитывает то же самое (я полагаю из-за обратной совместимости. Или используйте систему дат 1904 года, а не систему дат 1900 года ). Таким образом, нам нужно вычесть еще 1 день, чтобы решить эту проблему.

Таким образом, наш последний запрос на преобразование числа даты Excel в SQL Server будет

select dateadd(day,-2, 36526)
1 голос
/ 09 сентября 2010

Как кто-то сказал, сначала преобразуйте его в лучший формат в Excel.

Скорее всего, Excel и SQL Server по-разному определяют количество дней, прошедших с 1900-01-01. Я думаю, что у Excel была какая-то старая причуда, когда 1900 год был високосным или нет (для совместимости 1-2-3?), Поэтому есть один из дополнительных дней. Другой, я не знаю, возможно, он начинает рассчитывать на 1900-01-02 или Excel на самом деле начинается на 1900-01-00 или что-то еще? ^^

0 голосов
/ 31 октября 2014

Не только дата Excel 0 - 01.01.1900, но, похоже, Microsoft думала, что 1900 год - это скачок, поэтому мы могли найти 29.02.1900 в Excel, значение которого равно 60. Но год 1900, как и все Год столетия (кроме кратного 400) НЕ был високосным, поэтому необходимо вычесть 2 дня.

0 голосов
/ 09 сентября 2010

Excel предоставляет функции, которые будут конвертировать даты в строки (попробуйте список функций или Google).Это должно устранить проблему.

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