SQL datediff函数数据转换错误

问题描述 投票:0回答:2

我已经在查询中计算了字段,但是它减去了两个日期之间的天差。我正在使用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吗?

sql sql-server datediff
2个回答
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;

如果列中填充合法值,则将不返回任何行。


0
投票

您必须在ActualFinishDate或ProjFinishDate中有错误的数据。要查找错误的数据...

Select ActualFinishDate
From YourTable
Where ActualFinishDate > '' 
      And IsDate(ActualFinishDate) = 0
© www.soinside.com 2019 - 2024. All rights reserved.