sql-server - 如何删除字符串上的重音符号?

标签 sql-server

我有以下字符串

áéíóú

我需要将其转换为

aeiou

我怎样才能实现它? (我不需要比较,我需要新的字符串来保存)

最佳答案

尝试使用COLLATE:

select 'áéíóú' collate SQL_Latin1_General_Cp1251_CS_AS

对于 Unicode 数据,请尝试以下操作:

select cast(N'áéíóú' as varchar(max)) collate SQL_Latin1_General_Cp1251_CS_AS

我不确定使用第二种方法时您可能会在翻译中丢失什么。

更新

看起来是一种特殊情况,我们必须分别处理大小写。您可以这样做(此代码是用户定义函数的良好候选):

declare @str nvarchar(max) = N'ñaàeéêèioô; Œuf un œuf'
select cast(
    replace((
        replace(@str collate Latin1_General_CS_AS, 'Œ' collate Latin1_General_CS_AS, 'OE' collate Latin1_General_CS_AS) 
    ) collate Latin1_General_CS_AS, 'œ' collate Latin1_General_CS_AS, 'oe' collate Latin1_General_CS_AS) as varchar(max)
) collate SQL_Latin1_General_Cp1251_CS_AS 
-- Output:
-- naaeeeeioo; Oeuf un oeuf

用户定义函数

create function dbo.fnRemoveAccents(@str nvarchar(max))  
returns varchar(max) as
begin
return cast(
    replace((
        replace(@str collate Latin1_General_CS_AS, 'Œ' collate Latin1_General_CS_AS, 'OE' collate Latin1_General_CS_AS) 
    ) collate Latin1_General_CS_AS, 'œ' collate Latin1_General_CS_AS, 'oe' collate Latin1_General_CS_AS) as varchar(max)
) collate SQL_Latin1_General_Cp1251_CS_AS 
end

关于sql-server - 如何删除字符串上的重音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578582/

相关文章:

sql - 仅在非空时返回选择查询的结果

sql-server - SSRS条形图问题

sql-server - SQL Server Windows 身份验证

sql-server - 在 SQL Server 代理上下文中,什么是作业服务器?

sql-server - CTE 与 SQL Server 中的 View 性能

c# - 数据库中的 AppSettings 而不是 App.Config

sql-server - 从 CSV 文件填充 SQL 数据库

sql - 有没有办法在 Microsoft SQL Server 中每个表的每个字段中找到特定值?

sql-server - SQL Server 和 IN 子句中大范围值的效率

sql-server - 如何使用 Visual Studio 将 Azure SQL 备份 (.bacpac) 导入到 LocalDB?