0

オラクルでコンマで区切られた数字を含む 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 のキーを照合または正規表現を照合する方法はありますか?

4

1 に答える 1

1

このために正規表現なしで通常の結合を行うことができます:

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,た。

于 2013-03-15T10:16:41.440 に答える