从字符串和日期字段生成日期,并与另一个日期进行比较。SQL
我试图将日期作为SQL中where子句的一部分进行比较。 一个日期称为ExitDate,是标准的日期时间字段。 另一个日期是需要从名为Renewal的varchar(5)字段中提取的日期,该字段保存日期的“dd/mm”部分 我需要的比较是从ExitDate中提取'year',从Renewal字段中添加'dd/mm'字符串,然后将该日期作为一个整体与ExitDate进行比较 在这之后,有一种情况是,根据比较的结果,采用如上所述的复合日期,然后再加上4年或5年 到目前为止,我有代码从EXITDATE字段中提取年份,将其转换为字符串,从续订字段中添加“dd/mm”字符串,然后将其转换回用于比较的日期。在比较之后,它会再次执行此操作,但还具有DATEADD功能,可将年份添加到日期从字符串和日期字段生成日期,并与另一个日期进行比较。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
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。请参阅。共享要处理的架构和示例数据