Неожиданная ошибка преобразования текста в дату в SQL Server - PullRequest
0 голосов
/ 07 ноября 2019

У меня проблема с преобразованием значений года, месяца и дня в значения даты.

SELECT datefromparts(b.Install_year, b.shipm_month, b.shipm_day)

Я уже нашел решение проблемы, обнаружив, что некоторые значения DAY равны 0. Но яЛюбопытно, почему все работает определенным образом.

SELECT datefromparts(2005, 4, b.shipm_day)

Для целей тестирования я установил фиксированные значения года и месяца. Положив 1,3,5,7,8,10,12 в месяц и запустив его в Management Studio, я смогу увидеть результаты. Значения: 2,4,6,9 и 11 вызывают ошибку ниже: «Невозможно создать дату типа данных, некоторые аргументы имеют недопустимые значения».

Любой знает, почему работают определенные значения идругие нет?

1 Ответ

4 голосов
/ 07 ноября 2019

Вероятно, это из-за того, что значение "день" равно 31, а в этих месяцах нет 31 дня.

datefromparts() создает только действительные даты.

Это не так легко исправитьпотому что datefromparts() не имеет версии "try_".

Вот один из методов:

select coalesce(try_convert(date, concat(2005, '-', 4, '-', b.shipm_day)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 1)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 2)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 3))
               )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...