从字符串和日期字段生成日期,并与另一个日期进行比较。SQL

从字符串和日期字段生成日期,并与另一个日期进行比较。SQL,sql,sql-server-2008,Sql,Sql Server 2008,我试图将日期作为SQL中where子句的一部分进行比较。 一个日期称为ExitDate,是标准的日期时间字段。 另一个日期是需要从名为Renewal的varchar(5)字段中提取的日期,该字段保存日期的“dd/mm”部分 我需要的比较是从ExitDate中提取'year',从Renewal字段中添加'dd/mm'字符串,然后将该日期作为一个整体与ExitDate进行比较 在这之后,有一种情况是,根据比较的结果,采用如上所述的复合日期,然后再加上4年或5年 到目前为止,我有代码从EXITDATE

我试图将日期作为SQL中where子句的一部分进行比较。 一个日期称为ExitDate,是标准的日期时间字段。 另一个日期是需要从名为Renewal的varchar(5)字段中提取的日期,该字段保存日期的“dd/mm”部分

我需要的比较是从ExitDate中提取'year',从Renewal字段中添加'dd/mm'字符串,然后将该日期作为一个整体与ExitDate进行比较

在这之后,有一种情况是,根据比较的结果,采用如上所述的复合日期,然后再加上4年或5年

到目前为止,我有代码从EXITDATE字段中提取年份,将其转换为字符串,从续订字段中添加“dd/mm”字符串,然后将其转换回用于比较的日期。在比较之后,它会再次执行此操作,但还具有DATEADD功能,可将年份添加到日期

AND ed.EXITDATE is not null
and s.EDATE > case when 
convert(datetime,(p.RENEWAL + '/' + convert(varchar(4),YEAR(ed.exitdate))),102) > ed.exitdate
then DATEADD(year,-5,convert(datetime,(p.RENEWAL + '/' + convert(varchar(4),YEAR(ed.exitdate))),102))
else DATEADD(year,-4,convert(datetime,(p.RENEWAL + '/' + convert(varchar(4),YEAR(ed.exitdate))),102)) end
我目前得到一个错误:将varchar数据类型转换为datetime数据类型导致值超出范围

有没有一种更简单的方法可以做到这一点,或者我从转化者那里遗漏了一些会导致这个问题的东西

编辑:

下面是一个相关表格的示例 所有涉及的日期均为dd/mm/yyyy格式

Table ED
ID      |EXITDATE(datetime)
1       |01/05/2018
2       |06/10/2018

Table Renewal
Scheme  |RENEWAL(VARCHAR(5))
1       |02/06
2       |04/08

Table s
SalNo   |ID   |EDATE
1       |1    |02/05/2015
2       |1    |02/05/2016
3       |1    |02/05/2017
4       |1    |02/05/2018
1       |2    |18/05/2015
2       |2    |18/05/2016
3       |2    |18/05/2017
4       |2    |18/05/2018
我希望从EXITDATE Match和反对ID=方案中选取一年,并将这两个字符串加在一起;也就是说,ID1将于2018年6月2日生产,ID2将于2018年8月4日生产,并将其与原始日期进行比较

问候


Matt

根据您的数据,您应该使用103而不是102。请参阅。

共享要处理的架构和示例数据