回答

4

檢出thisthis。他們是如何做到這一點偉大的職位。

5

答案是否定的,不是一般情況下,雖然它可能取決於你的意思是有效的。爲了達到這些目的,我將使用以下定義:'按照合理順序有效使用索引和連接',這可能與任何其他目標一樣好。

在這種情況下,'Efficient'查詢是's-arg'能的,這意味着它們可以使用索引查找來縮小搜索謂詞的範圍。等式(t-joins)和簡單的不等式可以做到這一點。 'AND'謂詞也可以做到這一點。之後,我們進入表格,索引和範圍掃描 - 即必須進行記錄(或索引 - 關鍵字索引 - 鍵)比較的操作。

Sontek的回答描述了一種將regexp功能內嵌到查詢中的方法,但操作仍然需要根據記錄對記錄進行比較。將它封裝在一個函數中將允許一個基於函數的索引,其中計算的結果在索引中得以實現(Oracle支持這一點,並且您可以通過使用in this article討論的那種技巧在SQL Server中獲得等效的功能)。但是,您無法爲任意正則表達式執行此操作。

在一般情況下,正則表達式的語義不適合以索引的方式修剪匹配集,因此將rexegp支持集成到查詢優化器中可能是不可能的。

0

我認爲我們可以在SQL Server 2008中(HIERARCHYID,地理空間)的新類型看,如果微軟這樣做增加這一點,會在一個SQL CLR大會

形式。如果你能將Assemblies安裝到您的數據庫中,您可以通過在Visual Studio中創建一個新的Database \ SQL Server項目來自行推出 - 這將允許您創建新的Trigger/UDF/Stored Proc/Aggregate或UDT。您可以將System.Text.RegularExpressions導入到該類中,然後從該類中導出。

希望這有助於

1

我很想有原生地叫正則表達式在SQL Server中的即席查詢和存儲過程中使用的能力。我們的DBA不允許我們創建CLR函數,因此我一直在使用LINQ Pad作爲一種窮人的特殊事件查詢編輯器。在處理已保存到數據庫的結構化數據(如JSON或XML)時,它特別有用。

而且我同意這看起來像是一個疏忽,沒有正則表達式支持,它似乎是查詢語言的一個顯而易見的功能。希望我們能在未來的版本中看到它,但人們長期以來一直在尋求它,但它尚未成爲產品的一部分。

我看到反對它的最常見的原因是形成不良的表達式會導致在.NET中不會中止並且幾乎總是需要重新啓動計算機的catastrophic backtracking。也許一旦他們在框架中解決了這個問題,我們將會看到它包含在未來版本的SQL Server中。

+2

這是猜測和評論,不是答案。 – amoss 2011-12-01 20:08:41