2013-08-29 35 views
1

我有一個表有description_text列(NVARCHAR),我需要檢查任何特殊字符(來自ascii codes 128 to 255)。檢測varchar列上的所有特殊字符(ascii碼128到255)

我寫的是:

SELECT cid as ID, description_id as "Element ID", description_text as Text, 'special characters in description_text (tbdescription)' as "Error" 
FROM tbdescription d 
WHERE 
(
description_text LIKE '%' || CHR (129) || '%' 
or description_text LIKE '%' || CHR (130) || '%' 
//..and so on..// 
) 

哪個做這項工作,但我敢肯定有核實所有這些ASCII碼沒有所有的or條件的更優雅的方式。

我使用Oracle客戶端版本11.1.0.6.0

+0

作爲另一種選擇,您可以使用[regexp_like()](http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions007.htm#i1048942)正則表達式函數。查詢的where子句看起來不那麼混亂,但性能很可能會下降。 –

+0

你的意思是:'where regexp_like(description_text,'('|| chr(128)||'''chr(129)||')')'?仍然有'或'條件。如果可能的話,我正在尋找檢查ascii代碼範圍的東西。 –

回答

1

你幾乎沒有。其中regexp_like(description_text,'('|| chr(128)||' - '|| chr(255)||')')

在正則表達式中使用hiphen而不是pipe。

+0

我試着用普通字符('regexp_like(description_text,'('|| chr(97)||'''chr(122)||')')')來檢查它是否返回任何結果,但事實並非如此。你能檢查爲什麼嗎? –

+0

它爲我工作。 http://sqlfiddle.com/#!4/9bbe9/135 –

+0

我的不好,忘了改''(''爲''[''。謝謝:) –