我需要拆分一个由Pipe分隔的列并与记录进行比较。像这样的东西
select 1
from T1 t1
where t1.date_col not between '01-JAN-2005' and '31-JAN-2005';
我需要从参考表中填充from子句值,其中数据类似于
ref_table
col_1
01-JAN-2005 | 31-JAN-2005
查询我正在努力实现
REGEXP_SUBSTR ( col_1
, '^[^|]+') from ref_table
导致01-JAN-2005
。
Table T1
date_col
01-Jan-05
15-Jan-05
31-Mar-05
Ref_table
col_1
01-JAN-2005 | 31-JAN-2005
答案 0 :(得分:0)
使用参考表中的间隔加入表t1
中的日期,并从原始日期集中减去结果:
select t11.date_col
from t1 t11
minus
select t12.date_col
from t1 t12
join (
select to_date ( trim ( substr(col_1, 1, instr(col_1, '|') - 1) ), 'DD-Mon-YYYY' ) d_from
, to_date ( trim ( substr(col_1, instr(col_1, '|') + 1) ), 'DD-Mon-YYYY' ) d_to
from ref_table
) rt on (
rt.d_from <= t12.date_col
AND rt.d_to >= t12.date_col
)
;
我假设您的参考表中的col_1
包含成对的排除区间。
答案 1 :(得分:0)
你可以这样做:
--Sample data
with t1 as (
select '01-Jan-05' col_1 union
select '15-Jan-05' union
select '31-Mar-05'
),
Ref_table as (
select '01-JAN-2005 | 31-JAN-2005' col_1
)
select *
from t1,
Ref_table r
where to_date(t1.col_1, 'DD/MON/YY')
not between to_date(trim(regexp_replace(r.col_1, '(.*)\|.*', '\1')), 'DD/MON/YY')
and to_date(trim(regexp_replace(r.col_1, '.*\|(.*)', '\1')), 'DD/MON/YY')
虽然你真的应该改进你的ref_table
设计。存储值与一些字符分隔总是证明是一个问题。