オラクルでコンマで区切られた数字を含む varchar と整数を一致させる必要があるという奇妙なシナリオに直面しています
例:
表 t1:
ID 整数 キー整数
表 t2
ID整数、 キー varchar2
T1 値は次のとおりです。
1,111 2,201 3,301
T2 値は次のとおりです。
1、「111,301」 2、「111,201」 3、「201,301」
問題: T1 のキーと T2 のキーを照合または正規表現を照合する方法はありますか?
このために正規表現なしで通常の結合を行うことができます:
select *
from t1
inner join t2
on ','||t2.keys||',' like '%,'||to_char(t1.key)||',%';
例えば:
SQL> create table t1(id, key)
2 as
3 select 1, 111 from dual union all
4 select 2, 201 from dual union all
5 select 3, 301 from dual;
Table created.
SQL> create table t2(id, keys)
2 as
3 select 1, '111,301' from dual union all
4 select 2, '111,201' from dual union all
5 select 3, '201,301' from dual;
Table created.
SQL> select *
2 from t1
3 inner join t2
4 on ','||t2.keys||',' like '%,'||to_char(t1.key)||',%';
ID KEY ID KEYS
---------- ---------- ---------- -------
1 111 1 111,301
1 111 2 111,201
2 201 2 111,201
2 201 3 201,301
3 301 1 111,301
3 301 3 201,301
6 rows selected.
正規表現ではなく、単なる連結です。たとえば、比較したいとしましょう
KEY KEYS
111 111,301
私たちは言うことができます
where keys like '%'||key||'%'
つまり、拡張された、これは
where '111,301' like '%111%'
これはうまく一致します。しかし、そこにもいくつかのコンマを追加しました。つまり、私はこれをしました:
where ',111,301,' like '%,111,%'
なんで?代わりに、次のデータがあったと想像してください。
KEY KEYS
111 1111,301
単純な結合を行った場合:
where '1111,301' like '%111%'
誤って一致します。両側に先頭と末尾のコンマを挿入することにより:
where ',1111,301,' like '%,111,%'
,1111,
is not like のように、 is が誤って一致することはなくなりまし,111,
た。