捕获 SQL Server 中第 20 次出现的情况

问题描述 投票:0回答:1

任何人都可以帮我将这条语句从 Oracle 翻译成 SQL Server 吗?我正在寻找的字符串是

T-M123-123456
- 第 20 次出现,基本上相同的出现是
T-M

这是 Oracle 中的声明:

REGEXP_SUBSTR(FILE_CONTENT, '^T-[A-Z][0-9].*', 1, 20, 'm')
sql-server
1个回答
0
投票

SQL Server 不支持正则表达式,甚至 SQL Server 2022 也不支持。

微软承诺在下一版本的 SQL Server 中提供支持(大约 2025 年?!)

请尝试以下基于通过 SQL Server 的 XML 和 XQuery 进行标记化的解决方案。

T-SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(MAX));
INSERT @tbl (tokens) VALUES
('Qfntoqgjqnvwhtoupqjc
T-M123-1234567890
Jfjxnankcnvnnsmnv
Fjndncnrjdnnc
T-M123-1234567891
Ddndjjjjdmxndbx
Dnnxnxn
T-M123-1234567892
Dhdhdjdjxnn
T-M123-1234567893
Hdjxndnd
Dbxbxn
T-MDnxnxnnx
Ndndndn
Dnxdn
T-M123-1234567894
Dhdhd
T-M123-1234567895
Djdndj
T-MDjdndj
Dndn
T-M123-1234567896
Sndndjd
T-M123-1234567897
Jerrf
Gjfjfdjdnd
T-M123-1234567898
Rjrjrjf
Fjdndjf
T-M123-1234567899
Jdjffj
T-M123-1234567900
Ffnm
T-M123-1234567901
Rmdnd
Dxndnxn
T-M123-1234567902
Djdjrjj
Dndnd
T-M123-1234567903
Djdjdjd
Dndndndn
T-M123-1234567904
Dnxndn
T-M123-1234567905
Dndndnd
T-M123-1234567906
Snnddn
T-M123-1234567907
Nedndn
T-MNsnddn
Sndsn
T-M123-1234567908
Nenene
Nenddn
T-MDddnns
Nenenene
Ejej
T-M123-1234567909
Jeejjeje
Jeejje
T-M123-1234567910
Wirhdndn
Endndn
T-M123-1234567911
Jedj
Ssn
Qycm
Ddn')
-- DDL and sample data population, end

DECLARE @separator CHAR(1) = CHAR(10);

SELECT *
    , c.value('(/root/r[substring(text()[1],1,7)="T-M123-"][20]/text())[1]','VARCHAR(20)') AS result
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' + 
    REPLACE(tokens, @separator, ']]></r><r><![CDATA[') + 
    ']]></r></root>' AS XML)) AS t1(c);

输出

身份证 代币 结果
1 Qfntoqgjqnvwhtoupqjc T-M123-1234567890 Jfjxnankcnvnnsmnv Fjndncnrjdnnc T-M123-1234567891 Ddndjjjjdmxndbx Dnnxnxn T-M123-1234567892 Dhdhdjdjxnn T- M123-1234567893 Hdjxndnd Dbxbxn T-MDnxnxnnx Ndndndn Dnxdn T-M123-1234567894 Dhdhd T-M123-1234567895 Djdndj T-MDjdndj Dndn T-M123-1234567896 Sndndjd T-M123-1234567897 Jerrf Gjfjfdjdnd T-M123-1234567898 Rjrjrjf Fjdndjf T-M123-1234567899 Jdjffj T-M123-1234567900 Ffnm T-M123-1234567901 Rmdnd Dxndnxn T-M123-1234567902 Djdjrjj Dndnd T-M123- 1234567903 Djdjdjd Dndndndn T-M123-1234567904 Dnxndn T-M123-1234567905 Dndndnd T-M123-1234567906 Snnddn T-M123-1234567907 Nedndn T-MNsnddn Sndsn -1234567908 Nenene Nenddn T-MDddnns Nenenene Ejej T-M123-1234567909 Jeejjeje Jeejje T-M123-1234567910 Wirhdndn Endndn T-M123-1234567911 Jedj Ssn Qycm Ddn T-M123-1234567909
© www.soinside.com 2019 - 2024. All rights reserved.