通过将自定义日/月连接到提供的年份来加入

时间:2013-08-23 13:32:30

标签: sql db2

我正在使用sql db2连接两个表,以便按日期移动房屋,但是我只在其中一个表中提供了年份:

select a.person,b.from_date,b.to_date,a.year from table1
join
table2
on a.person = b.person
and a.year between year(b.from_dt) and year(b.to_dt)

但我想在最后一行将“1月1日”添加到a.year。 (b.from_dt和b.to_dt是完整日期)

有没有办法让我连续一年和我的自定义日/月?目前我正在带回重复项,因此它会读取某些,如

and a.year'01-01' between b.from_dt and b.to_dt

谢谢!

2 个答案:

答案 0 :(得分:0)

这个逻辑接近你想要的:

a.year between year(b.from_dt) + 1 and year(b.to_dt)

错过的一天是b.from_dt是1月1日。在许多应用程序中,这不会产生任何影响,因为这是一个假期。

如果这是一个问题,您可以直接测试它:

(a.year > year(b.from_dt) or
 (a.year = year(b.from_dt) and month(b.from_dt) = 1 and day(b.from_dt = 1)
) and a.year >= year(b.to_dt)

您也可以开始进行字符串操作,但也可以使用整数运算来执行此操作:

a.year*10000+101 between year(b.from_dt)*10000+month(b.from_dt)*100+day(b.from_dt) and
                         year(b.to_dt)*10000+month(b.to_dt)*100+day(b.to_dt);

答案 1 :(得分:0)

我不熟悉DB2,但是看过一些文档,也许这样的东西会起作用......

select a.person,b.from_date,b.to_date,a.year from table1
join
table2
on a.person = b.person
and to_date((CAST (a.year AS VARCHAR(4)) CONCAT '0101'),'YYYYMMDD' ) between b.from_dt and b.to_dt

to_date函数似乎接受某种格式的字符串并输出日期,所以如果我们将整数年从a.year转换为字符串然后连接0101为1月1日,我们应该能够在to_date函数中提供它。