Почему преобразование строки в дату не удается? - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть устаревшая база данных, и ее даты хранятся в varchar в этом формате, например 1/17/2020

Но при попытке преобразовать в дату выдает ошибку.

where
    Convert(date, vi.InvoiceDate, 106) between Convert(date, '1/17/2020', 103) and Convert(date, '1/17/2030', 103)

Я перепробовал все форматы, 103, 106 и более, но ничего не работает.

1 Ответ

2 голосов
/ 08 февраля 2020

Используйте try_convert() и правильный формат, чтобы увидеть, где значения терпят неудачу:

select vi.InvoiceDate
from t
where Try_Convert(date, vi.InvoiceDate, 101) is null and
      vi.InvoiceDate is not null;

Обратите внимание, что я переключил формат на 101. Ваша дата выборки выглядит в формате ММ / ДД / ГГГГ. Вы можете найти список форматов в документации .

. Это хороший урок для вас о том, почему вы должны хранить значения, используя правильный тип. SQL Сервер поддерживает типы данных даты / времени по уважительным причинам . Собственные типы гарантируют, что значения допустимы, например.

...