powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Даты (Сдвиг в два дня)
8 сообщений из 8, страница 1 из 1
Даты (Сдвиг в два дня)
    #40122647
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT
(44376) AS PutDate,
month(44376) AS MES,
day(44376) AS DEN,
day(44376) AS DEN

MSSQL выдаёт 44376, 7, 1, 2021 т.е 01/07/2021

а в Экселе 44376 это 29/06/2021 (при смене формата)

Разве у них не одна система исчисления/хранения даты?

туплю...
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122650
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT
(44376) AS PutDate,
month(44376) AS MES,
day(44376) AS DEN,
year(44376) AS GOD
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122657
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Разве у них не одна система исчисления/хранения даты?
И да и нет :)
Да - потому что они оба берут за на чало отсчета "01.01.1900"
Нет - потому что в MS SQL Server эта дата равна 0, а в Excel - 1
Код: sql
1.
2.
3.
select v.i, cast(v.i as datetime)
    from (values (0), (1), (2), (44554)) v(i)
    order by v.i


попробуй сделать тоже самое в Excel.
В первых трех строках разница в один день, а в последней уже 2.
Откуда же взялся ещё один день? Да, Билл Гейтц его знает! Набежало за 120 лет...
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122704
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guf,

И как со всем этим жить?
Точнее, как народ со всем этим живёт . . .?
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122712
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Excel 1900-01-01 это 1
в МsSQL 1900-01-01 это 0

И где-то еще один день набежал . . . .
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122717
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Excel проще всего жить, если принимать дату с сервера не в виде числа, иначе интерпретируемого клиентом,
а в виде строки , форматирующей представление даты в американском формате 'MM/DD/YYYY'.
Именно в американском, и именно строки , это универсальный локаленезависимый вариант.
Иначе как повезет, при отказе от этого варианта не обещано, что приехавшая строка вообще окажется способной быть интерпретирована как дата.


Не только в Excel, для VBA вообще это предпочтительный способ передачи иначе интерпретируемых битов так,
чтобы серверная и клиентская математика в конце концов сошлась. CDate с таким форматом точно справится правильно.
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122724
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guf
Откуда же взялся ещё один день? Да, Билл Гейтц его знает! Набежало за 120 лет...

там интересная история :))
off Джоэл Спольски (c)
В большинстве программных сред даты хранятся в виде действительных чисел. При этом целая часть — это количество дней, истекших с некой оговоренной даты в прошлом, называемой началом эпохи (epoch). В Excel сегодняшняя дата 16 июня 2006 года хранится как число 38884, за точку отсчета принято 1 января 1900 года.

Я стал экспериментировать с различными функциями даты и времени Basic и Excel и обнаружил в документации Visual Basic нечто странное: в Basic началом эпохи считалось 31 декабря 1899 года, а не 1 января 1900 года, но по каким-то причинам сегодняшняя дата и в Excel, и в Basic представлялась одинаково.

Что?!

Я стал искать разработчика Excel, достаточно старого, чтобы помнить такие вещи. Похоже, ответ знал Эд Фрайз (Ed Fries).

— Ха, — сказал он мне, — проверь 28 февраля 1900 года.

— 59, — отвечал я.

— Теперь 1 марта 1900 года.

— 61!

— А где 60? — спросил Эд.

— 29 февраля 1900 года, год был високосным! Он делится на 4!

— Мысль интересная, но неверная, — сказал Эд, оставив меня в недоумении.

Пришлось провести некоторые исследования. Оказалось, что годы, которые делятся на 100, бывают високосными, только если при этом еще делятся на 400.

1900-й год не был високосным.

— В Excel ошибка! — воскликнул я.

— Не совсем так, — возразил Эд. — Нам пришлось пойти на это, чтобы импортировать таблицы Lotus 1-2-3.

— Значит, ошибка в Lotus 1-2-3?

— Да, но, скорее всего, умышленная. Требовалось уместить Lotus в 640 Кбайт — не так много памяти. Если не обращать внимания на 1900 год, то можно проверить год на високосность по двум правым разрядам числа -они должны быть нулевыми. Быстро и легко. Наверное, ребята из Lotus решили, что ничего не случится, если какие-то два месяца в далеком прошлом будут считаться неправильно. Похоже, разработчики Basic дотошно учли эти два месяца, сдвинув эпоху на день назад.
...
Рейтинг: 0 / 0
Даты (Сдвиг в два дня)
    #40122933
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 лет люди формировали отчеты, считали планы и премии....
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Даты (Сдвиг в два дня)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]