从字符串和日期字段构建日期,并与另一个日期进行比较..SQL



我正在尝试将日期作为SQL中where子句的一部分进行比较。 一个日期称为"退出日期",是标准"日期时间"字段。 另一个日期是需要从名为 Update 的 varchar(5( 字段中抽取的日期,该字段包含日期的 "dd/mm" 部分。

我需要的比较是从退出日期中获取"年份",从续订字段中添加"dd/mm"字符串,然后将该日期与整个退出日期进行比较。

之后,有一种情况是,采用上述综合日期,然后根据比较结果增加 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 数据类型转换为日期时间数据类型导致值超出范围。

有没有更简单的方法可以做到这一点,或者我是否从转换中遗漏了一些会导致此问题的内容?

编辑:

为了提供帮助,这里有一个涉及的表格示例 涉及的所有日期均为日/月/年格式

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 匹配与 ID = Scheme 中获取年份,并将两个字符串加在一起; 即。ID1 将生成 02/06/2018,ID2 将生成 04/08/2018,并将其与原始 EXITDATE 进行比较。

亲切问候

马 特

根据您的数据,您应该使用 103 而不是 102。参考这里。

相关内容

最新更新