2016-05-25 3 views
3

Я пытаюсь преобразовать числовое значение на сегодняшний день. Я искать его найти ниже ответОшибка преобразования даты в SQL Server 2012

SELECT CONVERT(DATETIME, CONVERT(FLOAT, 41547)) 

выход, который я получил, это 2013-10-02 00: 00: 00,000

Но если я проверяю значение даты в первенствовать It дает мне 2013-09-30, что на 2 дня меньше, чем я получаю на SQL Server.

Пожалуйста, помогите мне понять это преобразование.
Как я могу получить 2013-09-30 вместо 2013-10-02 для числа .

+0

Это, вероятно, связано с тем, вы отбрасываемой значение в 'float', который является приближенным тип данных. Если вы вместо этого добавили «целое», что вы получаете? – HoneyBadger

+0

Я забыл изменить, я использую float, а int int дает мне тот же результат. – dreamer

+0

Вы правы, я получаю те же результаты, что и для excel. Я не знаю, как excel делает преобразование, но я бы доверял sql-server больше ... – HoneyBadger

ответ

6

Excel относится к мифической дате 01/00/1900 (т. Е. 12/31/1899) как соответствует 0 и неверно относится к году 1900 года как високосный год. Таким образом, для дат до 01.03.1900 номер Excel фактически является числом дней после 12/31/1899.

Excel не будет форматировать любое число ниже 0 (-1 дает вам ##########), и поэтому это имеет значение только для «01/00/1900» до 02/28/1900, что делает его проще просто использовать дату 12/30/1899 в качестве базы.

Ссылка из этогоpost

Так что в вашем SQL Server необходимо добавить дни (41547 в вашем случае) из 12/30/1899 как ниже, и это будет дают тот же результат, что и возврат от excel.

SELECT DATEADD(DAY, 41547, '1899-12-30') 

Это приведет, как 2013-09-30 00: 00: 00,000

Если вы не хотите, метку времени в результате и ожидать того же формата с первенствует 2013-09- 30 затем использовать новообращенного в качестве

SELECT REPLACE(CONVERT(VARCHAR(10), DATEADD(DAY ,41547, '1899-12-30'), 111), '/', '-') 
+0

Спасибо Арулу за такое замечательное объяснение ..... Теперь я получил его ... – dreamer

+0

Просто еще одно сомнение Это преобразование выпускать только на SQL-сервере или он с другой базой данных также похож на oracle, mysql .. ??? – dreamer

+0

@dreamer Пожалуйста, обратитесь к [Oracle] (http://stackoverflow.com/questions/19398908/change-excel-date-number-to-oracle-date) – Arulkumar

Смежные вопросы