2015-09-24 48 views
4

我有一個SQL Server引擎,其中我有一個帶有filter子句的字段。我需要該條款組成以顯示除包含-以外的所有行。如何在T-SQL中編寫LIKE以顯示除「:」,「 - 」,「〜」之外的所有行?

我的查詢是:

SELECT 1 
WHERE '' LIKE '%[^:-~]%' 

它不工作 - 它顯示零行。我也試試這個:

SELECT 1 
WHERE 'aa:a' LIKE '%[^:-~]%' 

它顯示結果1,這是不希望的結果。

有沒有辦法管理這個?

備註:表達後like必須是字符串,將被保存在表字段中(對於〔實施例:'%[^:-~]%'將用作LIKE x.fldFilter

編輯:我需要驗證我的發動機內內SQL Server。我有一個參數表。在裏面我有Format列。對於特定的參數,我需要檢查提供的值是否適合Format列。

例如:

DECLARE @value AS VARCHAR(1000) = 'aaa:aa'; 

SELECT 1 FROM dbo.ParameterDefinitions X WHERE @value LIKE X.[Format]; 

X.[Format]列包含'%[^:-~]%'

當我測試一個值時,檢查必須返回1,如果它符合條件,並且不符合要求,則返回1。

所以,如果我測試值'aaa:aa'甚至' '它的作品。但是,當我有空字符串('')條件不起作用。

不幸的是,我不能改變我的引擎,並且不能用空間來代替''。我只是想知道爲什麼''不適合這種情況?

+0

你能否列出你的表中的內容以及你想返回哪些行的示例列表 –

+0

我更新了我的問題@ t-clausen.dk。 –

回答

2

這是由於SQL Server沒有一個可靠的正則表達式實現。

而不是否定與^

搜索與不

SELECT 1  
WHERE '' NOT LIKE '%[:-~]%' 

返回1行

SELECT 1 
WHERE 'aa:a' NOT LIKE '%[:-~]%' 

返回0行

編輯否定它: 打破你的搜索情況下

'' LIKE '%[^:-~]%' 

[^:-~]需要一個單一的性格讓一個空字符串必須失敗

'aa:a' LIKE '%[^:-~]%' 

%是0或多個通配符,它​​可以讓[^:-~]採取其選擇的'a'而無論是%收集你禁止的角色。

對於完整的正則表達式引擎,我們可以用下面的[^:-~]*來重複您的否定範圍,但SQL Server不支持。 Docs

剩下的唯一選擇就是對禁止的字符'%[:-~]%'進行搜索並取消等。

+0

我需要用單個字符串表達 - 請參閱我的評論。我有一個引擎,我在表格中過濾表達式。我需要像這樣應用它:'LIKE tbl.fldFilter'。在'fldFilter'裏面,我需要像''%[^: - 〜]%''這樣的字符串表達式。所以你的回答(雖然是正確的)不能應用於我的問題。 –

+0

所以它不起作用,因爲'%',它給我所有的字符? –

相關問題