我已经在查询中计算了字段,但是它减去了两个日期之间的天差。我正在使用SQL Server执行查询。
当我使用以下功能时:
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数据的转换类型转换为日期时间数据类型会导致超出范围的值。
转换前我需要将日期时间转换为varchar
吗?
首先,无需将结果转换为int。只需使用:
DATEDIFF(DAY, ACTUALFINISHDATE, PROJFINISHDATE)
第二,DATEDIFF()
在datetime
数据类型上工作正常。因此,有两种可能性:
DATETIMEE
,而是字符串。我猜(1)。您可以通过以下方法进行测试:
select ACTUALFINISHDATE, PROJFINISHDATE
from t
where try_convert(datetime, coalesce(ACTUALFINISHDATE, getdate())) is null or
try_convert(datetime, coalesce(PROJFINISHDATE, getdate())) is null;
如果列中填充合法值,则将不返回任何行。
您必须在ActualFinishDate或ProjFinishDate中有错误的数据。要查找错误的数据...
Select ActualFinishDate
From YourTable
Where ActualFinishDate > ''
And IsDate(ActualFinishDate) = 0