【发布时间】:2011-04-30 18:12:55
【问题描述】:
我需要对 varchar(20) 字段进行以下修改:
- 用普通字母替换重音符号(如 è 到 e)
- 在 (1) 之后删除所有不在 a..z 中的字符
例如
'aèàç=.32s df'
必须变成
'aeacsdf'
是否有特殊的存储函数可以轻松实现这一点?
更新:请提供 T-SQL 而非 CLR 解决方案。这是我暂时使用的解决方法,因为它暂时适合我的需求,无论如何使用更优雅的方法会更好。
CREATE FUNCTION sf_RemoveExtraChars (@NAME nvarchar(50))
RETURNS nvarchar(50)
AS
BEGIN
declare @TempString nvarchar(100)
set @TempString = @NAME
set @TempString = LOWER(@TempString)
set @TempString = replace(@TempString,' ', '')
set @TempString = replace(@TempString,'à', 'a')
set @TempString = replace(@TempString,'è', 'e')
set @TempString = replace(@TempString,'é', 'e')
set @TempString = replace(@TempString,'ì', 'i')
set @TempString = replace(@TempString,'ò', 'o')
set @TempString = replace(@TempString,'ù', 'u')
set @TempString = replace(@TempString,'ç', 'c')
set @TempString = replace(@TempString,'''', '')
set @TempString = replace(@TempString,'`', '')
set @TempString = replace(@TempString,'-', '')
return @TempString
END
GO
【问题讨论】:
-
仅供参考,您不需要使用 nvarchar 来为您的角色添加重音。除非你绝对需要它,否则我建议转换为 varchar
-
NVARCHAR 用于保存 Unicode 字符。重音字符不一定是 Unicode(很可能不是)。
-
是的,我知道,但是我正在处理的数据库是针对所有 nvarchar 的政策(奇怪的政策)
标签: sql-server sql-server-2005 tsql