如何通过检查 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;