SQL Server子字符串在caluse中的日期

时间:2016-10-10 15:43:08

标签: sql-server substring where

我正在尝试将varchar中包含的日期与where子句中的getdate()进行比较。 varchar变量总是如下所示:

  

上次见到:MM / DD / YY

一些示例数据:

Last Seen: 07/12/16
Last Seen: 08/01/16
Last Seen: 07/22/16
NULL
NULL
NULL
NULL
Last Seen: 07/28/16

将varchar转换为datetime并找到如下所示的天差:

datediff(day,CAST(substring(CA_NOTE, 12, 8) as datetime), getdate()) as dayspassed

问题是,当我把这个编码粘贴在where子句中以将日期与getdate()进行比较时,我一直得到同样的错误。

where datediff(day,CAST(substring(CA_NOTE, 12, 8) as datetime), getdate()) > 90
  

消息241,级别16,状态1,行3转换时转换失败   字符串的日期和/或时间。

我正在运行SQL Server 2014 Management Studio。

已编辑以考虑评论

destination-data建议使用TRY_PARSE工作!谢谢大家。

2 个答案:

答案 0 :(得分:1)

SQL不知道如何处理var prop = SortField.Split('.').Aggregate((Expression)param, Expression.Property); - 减去90天? 90分钟? 90年?

您需要使用getdate()-90等功能,例如

dateadd

答案 1 :(得分:1)

问题是您仍然将其转换为where convert(varchar(30),cast(substring(CA_NOTE, 12, 8) as datetime),102) < dateadd(dd, -90, getdate()) 。试试这个:

VARCHAR