powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему DATE + 1 перестал работать
18 сообщений из 18, страница 1 из 1
Почему DATE + 1 перестал работать
    #40073413
ol_chig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Внезапно перестали работать подобные вычисления SQL Server:
Код: sql
1.
2.
declare @date date = '20210527';
select @date + 1


Знаю что можно делать так:
Код: sql
1.
2.
declare @date date = '20210527';
select dateadd(day, 1, @date)


или выполнять подобную операцию с DATETIME, но почему пропала возможность работать таким образом с DATE? В чем может быть причина?
Версия сервера: Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073421
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ol_chig
Добрый день!
Внезапно перестали работать подобные вычисления SQL Server:
Код: sql
1.
2.
declare @date date = '20210527';
select @date + 1


Знаю что можно делать так:
Код: sql
1.
2.
declare @date date = '20210527';
select dateadd(day, 1, @date)


или выполнять подобную операцию с DATETIME, но почему пропала возможность работать таким образом с DATE? В чем может быть причина?
Версия сервера: Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

так решил мелкософт
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073425
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ol_chig,
а +1 к типу данных date вообще работал когда-нибудь?
к datetime - запросто
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073433
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andy st,

select @date + 1 это выражение, основанное на предположении типа переменной и особенностей поведения интерпретатора. Необходимо всегда использовать dateadd().
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073436
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andy st
ol_chig,
а +1 к типу данных date вообще работал когда-нибудь?
к datetime - запросто

Никогда к date нельзя было добавлять целые.

Только к Datetime. Да и то deprecated со времени MS SQL 2000.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073447
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перестал работать и очень хорошо. Синтаксический сахар, приводящий к нестабильности кода, есть зло.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073494
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andy st
ol_chig,
а +1 к типу данных date вообще работал когда-нибудь?
к datetime - запросто

Я, например, не знал, что оно и к datetime то работает :-)
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073496
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
andy st
ol_chig,
а +1 к типу данных date вообще работал когда-нибудь?
к datetime - запросто

Я, например, не знал, что оно и к datetime то работает :-)
Повезло.
А я задолбался вычищать эту "арифметику" из старых ХП.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073497
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое же, что надо сделать - вычистить код от подобных конструкций и запретить их применять внутренними распоряжениями. Вообще всё, что depricated или "будет удалено в будущих версиях".
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073525
ol_chig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andy st
ol_chig,
а +1 к типу данных date вообще работал когда-нибудь?

Вот именно что работал!)
И почему все считают что это "мусорный код", если к datetime это применимо? прибавление числа к datetime приводит увеличение этой даты на N дней, почему нельзя так же считать date, если программа понимает целое число как целый день, а не часы\минуты\секунды.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073527
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ol_chig
И почему все считают что это "мусорный код"


Как вам уже сказали, потому что это depricated поведение.
Использование depricated фич чревато "внезапно" проявляющимися ошибками при переходе на следующую версию SQL Server-а
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073534
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ol_chig

Вот именно что работал!

Не врите. Лечите дежавю.
Date появился в MS SQL 2008 и никогда не допускалось date +1.

ol_chig

И почему все считают что это "мусорный код", если к datetime это применимо? прибавление числа к datetime приводит увеличение этой даты на N дней, почему нельзя так же считать date, если программа понимает целое число как целый день, а не часы\минуты\секунды.

Патаму, что разработчики языков мечутся из крайности в крайность.
То "синтаксический сахар" добавляют до угрозы диабета, то заменители "сахара" внедряют.

Deprecated эта фича уже давно.
И не уберут ее, покуда жив datetime.

Что касаемо "православно ли это, али подлежит анафеме" - на C# поглядите, уже сахарница не выдерживает.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073565
ol_chig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

возможно у меня и правда глюки, раз столько человек говорят об одном и том же... Тогда ладно, буду считать что этот date+1 появился в коде сам по себе, заменив прошлый datetime+1. И начались ошибки.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073568
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ol_chig

И почему все считают что это "мусорный код", если к datetime это применимо? прибавление числа к datetime приводит увеличение этой даты на N дней, почему нельзя так же считать date, если программа понимает целое число как целый день, а не часы\минуты\секунды.


Все очень просто:

datetime это синоним float, т.е. числа с плавающей точкой, где целая часть — это количество дней, прошедших от базовой даты. Прибавление 1 приводит к получению следующей даты. Но прибавить месяц вот так просто уже не получится.

Date занимает 3 байта, а целое число - 4 байта. Выражение date+1 предполагает, что date преобразуется к целому числу, к этому числу прибавляется 1 и полученный результат преобразуется к date. Как на самом деле происходит обработка этих 3 байт для получения следующей даты нам не рассказывают. Поэтому приведение типа данных date к типу данных integer запрещено.

И правильно делают. Есть интерфейс, функции работы с датами, и его нужно использовать, так как реализация может измениться в очередной версии продукта.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073649
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ol_chig
буду считать что этот date+1 появился в коде сам по себе, заменив прошлый datetime+1.
date+1 мог появиться в коде, когда поле/переменная были datetime
Вы же проект храните в базе сорсов с версионностью? Посмотрите, что там было, с этим кодом и моделью данных, кто чего когда менял.
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073703
ol_chig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения!
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40073726
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
datetime2 тоже не работает с +1. :(
...
Рейтинг: 0 / 0
Почему DATE + 1 перестал работать
    #40074420
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
datetime2 тоже не работает с +1. :(


Гадать и удивляться тому, что можно и что нельзя делать с типами данных, как и перебирать варианты не нужно. Все "украдено" до нас:

https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-ver15

Согласно концепции типов данных каждая переменная относится к одному и только одному типу данных. Тип данных определяет a) область допустимых значений переменных этого типа и b) набор операций, которые можно применять к переменным этого типа. К сожалению, в разделе о типах ( https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15 ) пункт b не упоминается. Но по ссылкам можно добраться и до операций.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему DATE + 1 перестал работать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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