任何人都可以帮我将这条语句从 Oracle 翻译成 SQL Server 吗?我正在寻找的字符串是
T-M123-123456
- 第 20 次出现,基本上相同的出现是 T-M
。
这是 Oracle 中的声明:
REGEXP_SUBSTR(FILE_CONTENT, '^T-[A-Z][0-9].*', 1, 20, 'm')
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 |