从大字符串中查找特定字符串All Position

时间:2017-02-03 04:37:00

标签: sql postgresql substring

我想在“DATASTRING”列中找到“LIID”字符串的所有位置,以帮助查找所有LLID值。

DATASTRING列包含MIXED数据,它是无效的XML文件。

查询:

     select id , DATASTRING from mixdatatable 

输出:

        id          DATASTRING

        1           ABC XYZ IS 1 ..
                    <ObjectValue /><CP /><SIProps ST="4" PL="False" PLS="" />
                    <STI_SummaryActiveProblemsField LIID="cdbd7044-ccde-11db-8cba-df0a56d89593" IID="37742a5f-7998-4715-8d43-0d7a19284d44" IR="True" RW="1">
                    <HD Title="Active Problems" /><ObjectValue />
                    <CP><PosReplace /><NegReplace /></CP><SIProps ST="4" PL="False" PLS="" />
                    -<STI_DxItem IID="d85c91e7-703f-4f8c-9a38-961fb2d14828" RW="1" LIID="03e4da86-d57c-408e-9479-b6fb97cc9a60"><HD Title=" unspecified "/>
                    <STI_US><ObjectValue><TextValue><![CDATA[
                    ]]></TextValue></ObjectValue><CP />
                    <LIID='71194038-8ffb-488b-8af5-5f1f1a679115'>
                    <SIProps ST="1" SS=" " PL="False" PLS="" />
                    </STI_US> AAAAAA
                    979816816/881783683618317381-817

我想找到所有LIID值。 LLID值lenth为'36',例如'cdbd7044-ccde-11db-8cba-df0a56d89593'

预期产出:

                      ID   LLID
                      1    cdbd7044-ccde-11db-8cba-df0a56d89593      
                      1    03e4da86-d57c-408e-9479-b6fb97cc9a60       
                      1    71194038-8ffb-488b-8af5-5f1f1a679115  

PostgreSQL版本8.3

注意:我没有创建功能或程序。

1 个答案:

答案 0 :(得分:3)

select id, unnest(regexp_matches(datastring,'LIID=[''"]([0-9a-f-]+)','g'))
  from mixdatatable

sqlfiddle.com

上进行测试