将Varchar数据类型转换为datetime数据类型会导致超出范围的值

时间:2015-11-07 22:49:23

标签: sql-server-2008 tsql datetime datediff

我的SQL问题有问题。我有两列日期。 IntD的FinDt和DesProDt。有时FinDt为0,有时DesProDt为0.我需要检查它们是否从0开始。如果其中任何一个是0,那么我想显示0,否则我想在两个日期之间做一个dateDiff来获得一个值。

CASE WHEN (CAST(F0001.dbo.OrdLn.DesProDt AS VARCHAR) = 0 
     OR CAST(F0001.dbo.OrdLn.FinDt AS VARCHAR) = 0) 
     THEN 0 
     ELSE DATEDIFF(D , CONVERT (datetime , CONVERT (varchar , F0001.dbo.OrdLn.DesProDt)) , CONVERT (datetime , CONVERT (varchar , F0001.dbo.OrdLn.FinDt))) 
END

我不明白我做错了什么。我收到一个错误,其中表示将varchar数据类型转换为datetime数据类型会导致超出范围的值。

有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您有一个或多个无效值。你必须找到它们。它们将处于某种类型的开头或结尾。

select F0001.dbo.OrdLn.DesProDt from table order by F0001.dbo.OrdLn.DesProDt  
select F0001.dbo.OrdLn.FinDt    from table order by F0001.dbo.OrdLn.FinDt