SQL ошибка преобразования данных функции datediff - PullRequest
0 голосов
/ 21 марта 2020

Я вычислил поле в своем запросе, тогда как оно вычитает разницу дней между двумя датами. Я использую SQL сервер для выполнения моего запроса.

Когда я использовал следующую функцию:

Cast(DATEDIFF(D,ACTUALFINISHDATE,PROJFINISHDATE) as int) AS 'Elasped Days

Оба поля даты datetime тип даты (например, 2019-02-23 00:00:00.000) , Я пробовал Convert() вместо Cast(), но все еще испытывал ту же проблему.

Я получаю следующую ошибку:

Msg 242, Уровень 16, Состояние 3 , Строка 7 Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.

Нужно ли преобразовывать время даты в varchar перед преобразованием?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Во-первых, нет необходимости преобразовывать результаты в int. Просто используйте:

DATEDIFF(DAY, ACTUALFINISHDATE, PROJFINISHDATE)

Во-вторых, DATEDIFF() отлично работает на datetime типах данных. Итак, есть две возможности:

  1. Ваши столбцы на самом деле не DATETIMEE, а вместо этого являются строками.
  2. Что-то еще генерирует ошибку.

Я бы предположил (1). Вы можете проверить это, выполнив:

select ACTUALFINISHDATE, PROJFINISHDATE
from t
where try_convert(datetime, coalesce(ACTUALFINISHDATE, getdate())) is null or
      try_convert(datetime, coalesce(PROJFINISHDATE, getdate())) is null;

Если столбцы заполнены допустимыми значениями, это не вернет строки.

0 голосов
/ 21 марта 2020

У вас должны быть неверные данные в ActualFinishDate или ProjFinishDate. Чтобы найти плохие данные ...

Select ActualFinishDate
From YourTable
Where ActualFinishDate > '' 
      And IsDate(ActualFinishDate) = 0
...