我面對奇怪的場景分離含有VARCHAR digits這裏我需要匹配用逗號oracle中分離出的含VARCHAR位數的整數的整數如何匹配用逗號在Oracle
實施例:
表T1:
id integer key integer
表T2
id integer, keys varchar2個
T1值是:
1,111 2,201 3,301
T2值:
1, "111,301" 2, "111,201" 3, "201,301"
問題:有沒有什麼辦法可以匹配或規則表示比賽與T2的鍵T1的關鍵?
我面對奇怪的場景分離含有VARCHAR digits這裏我需要匹配用逗號oracle中分離出的含VARCHAR位數的整數的整數如何匹配用逗號在Oracle
實施例:
表T1:
id integer key integer
表T2
id integer, keys varchar2個
T1值是:
1,111 2,201 3,301
T2值:
1, "111,301" 2, "111,201" 3, "201,301"
問題:有沒有什麼辦法可以匹配或規則表示比賽與T2的鍵T1的關鍵?
你可以不用正則表達式常規連接此:
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,
不喜歡,111,
。
您不應該將逗號分隔值存儲在單個列中。 – 2013-03-15 11:08:58
@kattashri a_horse_with_no_name有一個點。您必須儘快更改數據庫。拆分字段「鍵」,並將每個鍵放在一個單獨的記錄(整數類型字段)。您將在未來的時間避免許多問題。 – knagaev 2013-03-15 11:30:52