3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
如何在PATINDEX函數(shù)?
TSQL中的模式匹配不是完整的正則表達(dá)式庫,但它為您提供了基礎(chǔ)知識(shí)。
(摘自在線圖書)
Wildcard Meaning
% Any string of zero or more characters.
_ Any single character.
[ ] Any single character within the specified range
(for example, [a-f]) or set (for example, [abcdef]).
[^] Any single character not within the specified range
(for example, [^a - f]) or set (for example, [^abcdef]).

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您使用的是SQL Server 2016或更高版本,則可以sp_execute_external_script與R一起使用。它具有用于正則表達(dá)式搜索的功能,例如grep和grepl。
這是電子郵件地址的示例。我將通過SQL Server數(shù)據(jù)庫引擎查詢一些“人員”,將這些人員的數(shù)據(jù)傳遞給R,讓R決定哪些人員的電子郵件地址無效,然后讓R將這些人員的子集傳遞回SQL Server。“人員”來自示例數(shù)據(jù)庫中的[Application].[People]表[WideWorldImporters]。它們作為名為的數(shù)據(jù)幀傳遞到R引擎InputDataSet。R使用grepl函數(shù)和“ not”運(yùn)算符(感嘆號(hào)?。﹣聿檎夷男┤说碾娮余]件地址與RegEx字符串搜索模式不匹配。
EXEC sp_execute_external_script
@language = N'R',
@script = N' RegexWithR <- InputDataSet;
OutputDataSet <- RegexWithR[!grepl("([_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4}))", RegexWithR$EmailAddress), ];',
@input_data_1 = N'SELECT PersonID, FullName, EmailAddress FROM Application.People'
WITH RESULT SETS (([PersonID] INT, [FullName] NVARCHAR(50), [EmailAddress] NVARCHAR(256)))
請(qǐng)注意,必須在SQL Server主機(jī)上安裝適當(dāng)?shù)墓δ?。?duì)于SQL Server 2016,它稱為“ SQL Server R服務(wù)”。對(duì)于SQL Server 2017,它已重命名為“ SQL Server機(jī)器學(xué)習(xí)服務(wù)”。
結(jié)束語 微軟的SQL(T-SQL)實(shí)現(xiàn)沒有對(duì)RegEx的本機(jī)支持。與使用CLR存儲(chǔ)過程相比,此提議的解決方案對(duì)于OP可能并沒有任何希望。但這確實(shí)提供了解決該問題的其他方法。
- 3 回答
- 0 關(guān)注
- 1558 瀏覽
添加回答
舉報(bào)