SQL: Проверьте, является ли поле датой, а также между двумя датами

#sql

Вопрос:

Я пытаюсь написать SQL — запрос, который проверит, что данные находятся между двумя датами, но дата хранится в таблице как varchar. Вполне возможно, что дата указана не в том формате. Ниже приведен запрос:

 SELECT DISTINCT t.id, CONVERT(datetime,c.txt_date) as date
FROM table t
WHERE ISDATE(t.txt_date) = 1
    AND CONVERT(datetime,t.txt_date)BETWEEN @BeginDate AND @EndDate
 

Переменные @BeginDate и @EndDate объявляются как типы данных даты в начале сценария.

Я получаю эту ошибку: Conversion failed when converting date and/or time from character string.

Как я могу проверить, является ли значение в поле, txt_date , первой датой, а также проверить, находится ли значение между @BeginDate и @EndDate ? Могу ли я сделать это в 1 SQL-скрипте?

Комментарии:

1. Какой тип базы данных SQL вы используете?

2. Хранение дат в виде строк всегда приведет к совершенно ненужным проблемам. У вас нет проверки со строкой, и значения могут быть неоднозначными . «09/06/2021» и «06/09/2021» являются действительными датами, и если обе существуют в виде строк, вы не можете знать, июнь это или сентябрь.

Ответ №1:

Вы пробовали использовать параметр «стиль» функции ПРЕОБРАЗОВАНИЯ? Если вы считаете, что в данных могут быть строки, не относящиеся к дате, вы можете использовать TRY_CONVERT, который вернет значение NULL в случае сбоя преобразования и вместо него укажет значение по умолчанию.

ОБЪЕДИНЕНИЕ(TRY_CONVERT(t.txt_date), «значение по умолчанию»)

Ответ №2:

Попробуйте с :

 CAST(c.txt_date AS DATETIME) as date