如何通过检查 DB2 中另一表两列之间的范围来获取值
how to get value by checking the range between another tables two column in DB2
我在源中有一个带有 id 和 date_id 的列,我想从其他 table 中获取那个 date_id 的 date_skey 如果 date_id 存在于其他 tables start_date 和 end_date.
的范围内
TABLE 1
id | date_id
01 | 20201009
02 | 20161009
TABLE 2
id | date_skey | start_date | end_date
1 | 254 | 2019-01-01 00:00 | 9999-12-31 00:00
2 | 345 | 2017-01-01 00:00 | 2017-06-30 00:00
OUTPUT
id | date_id | date_skey
01 | 20201009 | 254
我正在使用 DB2 并且是新手,我的尝试是这样的
select tab1.id,tab1.date_id,tab2.date_skey
from tab.1
where exists(
select 1 from tab.2 where tab1.id = tab2.id and tab1.date_id
between replace(left(tab2.start_date,10),'-','') and replace(left(tab2.end_date,10),'-',''));
也试过这个
select tab1.id,tab1.date_id
from tab.1
where exists(
select 1 from tab.2 where tab1.id = tab2.id and tab1.date_id
between replace(left(tab2.start_date,10),'-','') and replace(left(tab2.end_date,10),'-',''));
但它给我错误。
我做错了什么?
提前致谢。
这里的“简单”方法是仅将 date_id
维护为真正的日期或时间戳列。然后,您只需要一个带有范围比较的简单内部联接。鉴于您当前的 table 设计,我们仍然可以使用该方法,但我们需要对 date_id
数字列进行一些转换,以将其转换为正式日期。
SELECT t1.id, t1.date_id, t2.date_skey
FROM table1 t1
INNER JOIN table2 t2
ON TO_DATE(CAST(t1.date_id AS VARCHAR(8)), 'YYYYMMDD')
BETWEEN t2.start_date AND t2.end_date;
我在源中有一个带有 id 和 date_id 的列,我想从其他 table 中获取那个 date_id 的 date_skey 如果 date_id 存在于其他 tables start_date 和 end_date.
的范围内TABLE 1
id | date_id
01 | 20201009
02 | 20161009
TABLE 2
id | date_skey | start_date | end_date
1 | 254 | 2019-01-01 00:00 | 9999-12-31 00:00
2 | 345 | 2017-01-01 00:00 | 2017-06-30 00:00
OUTPUT
id | date_id | date_skey
01 | 20201009 | 254
我正在使用 DB2 并且是新手,我的尝试是这样的
select tab1.id,tab1.date_id,tab2.date_skey
from tab.1
where exists(
select 1 from tab.2 where tab1.id = tab2.id and tab1.date_id
between replace(left(tab2.start_date,10),'-','') and replace(left(tab2.end_date,10),'-',''));
也试过这个
select tab1.id,tab1.date_id
from tab.1
where exists(
select 1 from tab.2 where tab1.id = tab2.id and tab1.date_id
between replace(left(tab2.start_date,10),'-','') and replace(left(tab2.end_date,10),'-',''));
但它给我错误。 我做错了什么? 提前致谢。
这里的“简单”方法是仅将 date_id
维护为真正的日期或时间戳列。然后,您只需要一个带有范围比较的简单内部联接。鉴于您当前的 table 设计,我们仍然可以使用该方法,但我们需要对 date_id
数字列进行一些转换,以将其转换为正式日期。
SELECT t1.id, t1.date_id, t2.date_skey
FROM table1 t1
INNER JOIN table2 t2
ON TO_DATE(CAST(t1.date_id AS VARCHAR(8)), 'YYYYMMDD')
BETWEEN t2.start_date AND t2.end_date;