是否有一種很好的方法將正則表達式轉換爲函數(MSSQL)內的LIKE? 的存儲過程並不比這個複雜得多:Sql喜歡正則表達式
(country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+)
該組不會在等一起使用,他們在那裏用於其他用途。
我想後期使用一個存儲過程中,如:
SELECT * FROM [Table]
WHERE test_regex(regex, 'text') = 1
凡正則表達式是[表]
是否有一種很好的方法將正則表達式轉換爲函數(MSSQL)內的LIKE? 的存儲過程並不比這個複雜得多:Sql喜歡正則表達式
(country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+)
該組不會在等一起使用,他們在那裏用於其他用途。
我想後期使用一個存儲過程中,如:
SELECT * FROM [Table]
WHERE test_regex(regex, 'text') = 1
凡正則表達式是[表]
檢查SQL的這種功能的一部分。它可以幫助你實現你的任務:PATINDEX('%[^0-9\.]%',@Input)
有沒有辦法告訴函數表達式的多個實例,如正則表達式:s「+」或「*」。 例如PATINDEX('%[a-c] +%',@輸入) – Andreas 2010-07-15 20:23:48
不,我不認爲它可能 – 2010-07-16 07:00:19
不開箱。在SQL Server中最接近正則表達式的搜索是PATINDEX(),但它不會執行正則表達式。
如果你真的想這樣做,你必須做一個CLR函數來運行正則表達式。你可能會擔心速度,但我會說幾乎沒有你會做的任何涉及正則表達式或模式的東西都可以使用索引。
這將在大型表上運行非常慢,解析每一行上的字符串列。
如果您可以更改表格,將字符串列拆分成不同的列可能會更好,因此您可以使用更傳統的WHERE country=... AND sessionid=...
,您甚至可以通過這種方式添加和使用索引。
我想像
SELECT ...
FROM [Table]
WHERE col LIKE 'country=[A-Za-z0-9]%&sessionid=[A-Za-z0-9]%'
可能是足夠接近?如果目的只是爲了帶回非空白國家和會話ID值的記錄。
如果列中的值不一定以'country'開頭,那麼您必須使用WHERE col LIKE '%country=[A-Za-z0-9]%&sessionid=[A-Za-z0-9]%'
,這可能會大大減慢KM的答案。
使用免費的SQL#範圍內的RegEx功能。這種方法我沒有任何性能問題。
你想完成什麼?某些基於表格的調度機制,其規則表達爲正則表達式? ...只是好奇,如果我猜對了。 – 2010-07-15 12:48:24
我會假設解析日誌文件。這看起來像一個查詢字符串。 – 2010-07-15 12:55:02
Tomek是正確的:) – Andreas 2010-07-15 19:20:56