2011-06-09 136 views
2

我在表中有一些特殊字符,主要是子彈(•)和方塊(■)(unicode字符?),當我做一個選擇時,我想忽略特殊字符但仍然返回文本的其餘部分。SQL Server - 忽略特殊字符

有沒有簡單的方法來做到這一點?

感謝

+0

通過「忽略」,你的意思是沒有返回他們結果或構造一個忽略它們的WHERE子句? – 2011-06-09 16:58:56

+0

我想返回文本但刪除字符 – user441365 2011-06-09 17:01:06

+2

@ user441365:如果知道確切的/特定的字符,那麼可以使用'replace'標量函數。 – 2011-06-09 17:05:41

回答

0

這可能有一些幫助。你可以用SQL來完成它,或者構建一個CLR方法並將它導入到你的SQL服務器實例中來做出決定。無論哪種方式,您都需要某種標量函數來比較字符。

link

3

嘗試使用此功能。以下代碼返回僅由Unicode字符代碼範圍組成的文本;在這種情況下,從0x0020 (space char)0x007E (tilde char),而其餘部分被省略。您可以定義一個或多個字符範圍以擴展此功能的有效字符。包含其代碼的Unicode字符列表可以例如here

CREATE FUNCTION dbo.CharRangeOnly (@InputText NVARCHAR(4000)) 
    RETURNS NVARCHAR(4000) 
AS 
BEGIN 
    DECLARE @Index INT 
    DECLARE @BufferChar INT 
    DECLARE @OutputText NVARCHAR(4000) 

    SET @Index = 1 
    SET @OutputText = '' 

    WHILE @Index < LEN(@InputText) + 1 
    BEGIN 
     SET @BufferChar = UNICODE(SUBSTRING(@InputText, @Index, 1)) 

     -- here you can specify the valid character range(s) 
     IF @BufferChar BETWEEN 0x0020 AND 0x007E 
     SET @OutputText = @OutputText + NCHAR(@BufferChar) 

     SET @Index = @Index + 1 
    END 

    RETURN @OutputText 
END 

您可以使用這種方式

SELECT dbo.CharRangeOnly (N'•■乕ขTeᶕst໙ ཙof β俼 ޠ➽Unᦗic៘ode✸ᾦ') 

調用字符的這個瘋狂的混合功能出奇返回

'Test of Unicode' 
+0

@daemon_x你如何打電話給這個功能? – user441365 2011-06-09 17:17:13

+0

更多關於我的信息? – 2011-06-09 21:38:04

+0

@Andriy - 我已經提到範圍是從Unicode的字符代碼32(0x0020 - 空格)到126(0x007E - 代字號),我知道我可以選擇一個更好的名字;而不是'BasicLatinOnly',這有點讓人困惑。但你可以根據你的需要簡單地修改範圍。例如。如果你只想得到整個阿拉伯語腳本,那麼你將範圍從1536(0x600 - 標點符號)設置爲1791(0x6FF - 字母Heh與倒V),所以你將改變行'IF @BufferChar BETWEEN 32和126 '到IF @BufferChar在1536和1791之間' – 2011-06-09 21:52:23