Как исправить этот запрос на удаление - PullRequest
1 голос
/ 09 июля 2019

Мне нужно выполнить запрос на выборку, подобный следующему:

select *
from faults
where insertdate < DATEADD(DAY, -30, sessiondate)

Запрос должен быть правильным, но я получаю эту ошибку:

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

Поскольку сессия содержит дату, но в виде строки, а не в формате даты.

Есть ли способ сделать этот запрос со строкой вместо типа даты?

1 Ответ

1 голос
/ 09 июля 2019

Ошибка кажется довольно понятной.insertdate и / или sessiondate хранятся в виде строк.Вы должны исправить данные.

SQL Server имеет три способа преобразования таких значений:

  • Неявным образом, помещая строки в место, где ожидаются дата / время.
  • Явно используя CAST() / CONVERT().
  • Явно и гибко, используя PARSE().

Вам необходимо выяснить, какой у вас формат.Они могут это преобразовать.Вы не предоставили никакой информации, но типичным методом будет:

where insertdate < DATEADD(DAY, -30, TRY_CONVERT(date, sessiondate, <date style here>))

Обычно достаточно форматов, доступных с CONVERT() (см. здесь ).Иногда вам может понадобиться использовать TRY_PARSE().

РЕДАКТИРОВАТЬ:

Для поддержки меток времени, вам необходимо преобразовать в datetime2:

try_convert(datetime2, '2019-07-08T09:17:19+02:00')

Вы должнысравнивать со значением с отметкой времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...