Почему процедура выдает ошибку, если я передаю ей дату, т.е. 20/04/2020? - PullRequest
1 голос
/ 20 апреля 2020

Я использую это

CAST(NotifDate as date) between @FromNotifDate AND @ToNotifDate

, но NotifDate сохраняется как varchar в таблице, но FromNotifDate И ToNotifDate имеют тип Дата .

Когда я передаю эти параметры 08/06/2014 and 20/04/2020 09:40:17, он не работает и выдает ошибку, т. Е.

Преобразование не удалось при преобразовании даты и / или время из строки символов.

но если я пройду 08/06/2014 and 10/04/2020 09:40:17, это сработает.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

Система с форматом даты по умолчанию - «ММ / дд / гггг», поэтому при установке значения «10/04/2020 09:40:17» система выдает ошибку «Ошибка вне диапазона»,

-- The conversion of a varchar data type 
-- to a datetime data type resulted in an out-of-range value.
select cast('20/04/2020 09:40:17'  as datetime)     

-- get the current session date_format
select date_format
from sys.dm_exec_sessions
where session_id = @@spid

-- set the dateformat for the current session
set dateformat dmy

-- this should work
select cast('20/04/2020 09:40:17'  as datetime)
3 голосов
/ 20 апреля 2020

Ваши текущие настройки локали базы данных, вероятно, установлены на en-US или другое, где формат даты - MM/dd/yyyy.

Это делает 08/06/2014 и 10/04/2014 действительными датами (но это 6 августа и 4 октября, не 8 июня и 10 апреля!), Но не 20/04/2020.

Чтобы использовать другой формат даты, вы можете использовать CONVERT, с правильным кодом стиля (я думаю, что это 103 для dd/MM/yyyy (см. документация )

Итак, это должно работать для вас: CONVERT(date, NotifDate, 103)

Обратите внимание, что в качестве общей рекомендации было бы полезно, чтобы вы вводили NotifDate как правильную SQL дату в вашей БД в первом Поместите, если возможно, чтобы избежать необходимости выполнять подобное преобразование в ваших запросах.

Кроме того, существует однозначный и международный стандартный формат ISO-8601 yyyy-MM-dd, который всегда должен правильно анализироваться с помощью CAST, I рекомендуем использовать его в любом локализованном формате, где это возможно в вашей инфраструктуре кода.

...