0

我正在使用 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)

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

有没有办法将年份和我的自定义日/月结合起来?目前我正在带回副本,所以它会读到类似

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

谢谢!

4

2 回答 2

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);
于 2013-08-23T13:45:36.143 回答
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 连接到 Jan 的第一天,我们应该能够将其输入to_date 函数。

于 2013-08-23T15:50:47.273 回答