连续查找多个模式匹配

时间:2016-04-20 03:50:45

标签: sql sql-server tsql pattern-matching

我的表格数据如下:

id    |    text
----------------
1     |  applicationName="App1" some text here applicationName="App2" text again applicationName="App2"
2     |  some text here applicationName="App3" some text here
3     |  some text here applicationName="App3"

我的输出应该是:

id    |    text
---------------------
1     | App1
1     | App2
1     | App2
2     | App3
3     | App3

我尝试了什么:我可以使用substring()charindex()为每行提取第一个匹配项,但我无法找到每行的后续项如输出中所示。

2 个答案:

答案 0 :(得分:0)

您必须根据具体要求创建UDF。 我只编写脚本,测试并将其转换为UDF然后使用交叉应用

DECLARE @i VARCHAR(300) = 'applicationName="App1" some text here applicationName="App2" text again applicationName="App2"'
DECLARE @j VARCHAR(300)
Declare @delimeter char(2)='="'
DECLARE @t1 TABLE (col1 VARCHAR(50))

WHILE LEN(@i) > 0
BEGIN
    IF (charindex(@delimeter, @i) > 0)
    BEGIN
        PRINT LEN(@i)

        SET @j = SUBSTRING(@i, charindex(@delimeter, @i) + 2, 4)

        INSERT INTO @t1
        VALUES (@j)

        SET @i = stuff(@i, 1, charindex(@delimeter, @i) + 7, '')
    END
    ELSE
        BREAK
END

SELECT *
FROM @t1

然后假设您创建了名为split的TVF,然后像这样使用它,

select *,fn.* from @t t
cross apply(select * from dbo.split('="',t.textdata))fn

答案 1 :(得分:0)

所以你可以尝试以下TSQL

See SQL demo here

    <p:commandLink oncomplete="
        #{documentController.documentAlreadyOpenedInExternalWindow?alert('succeed');
    :window.open('previewDocument.xhtml?documentId=#{documentController.documentId(task)}', 'new')" 
update="yourElement/Form ID"/>