我面对奇怪的场景分离含有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