我正在尝试比较日期,这是SQL中where子句的一部分。 一个日期称为ExitDate,是标准的DateTime字段。 另一个日期是需要从名为Renewal的varchar(5)字段中提取的日期,该字段保留日期的“ dd / mm”部分。
我需要进行的比较是从ExitDate中获取“年”,在“续订”字段中添加“ dd / mm”字符串,然后将该日期与整个Exitdate进行比较。
在此之后,有时会采用上述综合日期,然后再根据协作结果将其加4或5年。
到目前为止,我有代码从EXITDATE字段中提取年份,将其转换为字符串,在该RENEWAL字段上添加“ 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 = Scheme的年份并将两个字符串加在一起;即。 ID1将产生2018年6月6日,ID2将产生04/08/2018,并将其与原始退出日期进行比较。
亲切的问候
马特