用于基于列获取行的SQL查询

时间:2016-08-05 22:23:45

标签: sql oracle select

我有一个表Employee如下。 “更改”列包含其值通过我的应用程序修改的列的名称。此列中的数据以逗号分隔。我需要以这样的方式查询此表,结果每行有一个更改。即用逗号分割Change列中的数据并获取相应的行。我不知道从哪里开始!请帮忙。 enter image description here

2 个答案:

答案 0 :(得分:2)

让我们看看,您可以使用Oracle的regexp_substr功能:

select distinct Id, Name, Address, trim(regexp_substr(Change,'[^,]+', 1, level)) 
from Employee
connect by regexp_substr(Change, '[^,]+', 1, level) is not null;

这适用于Change列中任意数量的以逗号分隔的值。

请在此处查看有关rexexp_substr函数的文档:https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions116.htm

答案 1 :(得分:1)

这里我尝试使用包含多个级别的regexp_substr

    with temp as
    (
       select id, name, address, change from testemp
    )
    select id,name,address,trim(regexp_substr(change, '[^,]+', 1, levels.column_value)) change
    from temp t,
    table(cast(multiset(select level from dual 
    connect by  level <= length (regexp_replace(change, '[^,]+'))  + 1)
    as sys.OdciNumberList)) levels;