我正在使用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
谢谢!
答案 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函数中提供它。