2011-06-09 137 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