如何从SQL Server中的varchar中删除所有非英文字符?

时间:2015-08-21 07:43:44

标签: sql-server sql-server-2008

我正在尝试从数据库中替换非英文字母。以下不起作用,它与输入重新调整相同..

DECLARE @string VARCHAR (100)= 'AlfonsínSomoza' 
DECLARE @pos INTEGER

WHILE PATINDEX('%[^a-z]%',@string) > 0  
BEGIN
   SET @pos = PATINDEX('%[^a-z]%',@string)
   SET @string = REPLACE(@string,SUBSTRING(@string,@pos,1),'')
END

它返回:

AlfonsínSomoza

但我需要

AlfonsinSomoza

2 个答案:

答案 0 :(得分:3)

通过使用另一个排序规则(代码页125x)选择值,可以删除重音。例如

DECLARE @string VARCHAR (100)= 'AlfonsínSomoza' 

select @string COLLATE  SQL_Latin1_General_Cp1251_CS_AS ;

答案 1 :(得分:1)

SQL_Latin1_General_CP1253_CI_AI Latin1-General,不区分大小写,不区分重音,不区分kanatype,对Unicode数据不区分宽度,对于非Unicode数据,SQL Server在代码页1253上排序顺序

SELECT 'AlfonsínSomoza' Collate SQL_Latin1_General_CP1253_CI_AI

仅当您没有使用unicode字符串时,才能执行此操作,如果您有unicode字符串,请先将其强制转换为varchar。