SQLdatediff函数数据转换错误

SQL datediff function data convertion error

我在查询中计算了字段,而它减去了两个日期之间的天数差异。我正在使用 SQL 服务器来执行我的查询。

当我使用以下功能时:

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

两个日期字段都是datetime日期类型(例如2019-02-23 00:00:00.000)。我已经尝试 Convert() 而不是 Cast(),但仍然遇到同样的问题。

我收到以下错误:

Msg 242, Level 16, State 3, Line 7 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

转换前是否需要将日期时间转换为varchar

ActualFinishDate 或 ProjFinishDate 中的数据一定是错误的。查找不良数据...

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

首先,不需要将结果转换为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;

如果列中填充了合法值,这将 return 没有行。