#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