我在表中有一些特殊字符,主要是子弹(•)和方块(■)(unicode字符?),当我做一个选择时,我想忽略特殊字符但仍然返回文本的其余部分。SQL Server - 忽略特殊字符
有没有简单的方法来做到这一点?
感谢
我在表中有一些特殊字符,主要是子弹(•)和方块(■)(unicode字符?),当我做一个选择时,我想忽略特殊字符但仍然返回文本的其余部分。SQL Server - 忽略特殊字符
有没有简单的方法来做到这一点?
感谢
从来没有体验到这一点,但我听说你需要获得与A N前缀的回报。 查看下面的链接, http://support.microsoft.com/kb/239530
这可能有一些帮助。你可以用SQL来完成它,或者构建一个CLR方法并将它导入到你的SQL服务器实例中来做出决定。无论哪种方式,您都需要某种标量函数来比较字符。
尝试使用此功能。以下代码返回仅由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'
@daemon_x你如何打电话给这个功能? – user441365 2011-06-09 17:17:13
更多关于我的信息? – 2011-06-09 21:38:04
@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
通过“忽略”,你的意思是没有返回他们结果或构造一个忽略它们的WHERE子句? – 2011-06-09 16:58:56
我想返回文本但删除字符 – user441365 2011-06-09 17:01:06
@ user441365:如果知道确切的/特定的字符,那么可以使用'replace'标量函数。 – 2011-06-09 17:05:41