gpt4 book ai didi

sql-server - 如何删除 sql-server 中的重音符号和所有字符 <> a..z?

转载 作者:行者123 更新时间:2023-12-01 18:31:26 26 4
gpt4 key购买 nike

我需要对 varchar(20) 字段进行以下修改:

  1. 用普通字母替换重音符号(例如 è 到 e)
  2. 在(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

最佳答案

实现这一目标的最佳方法非常简单且高效:

SELECT 'àéêöhello!' Collate SQL_Latin1_General_CP1253_CI_AI

输出“aeeohello!”

字符串不能是 unicode。如果您有 nvarchar,只需在使用排序之前将其转换为 varchar。

这是一个满足OP需求的函数:

create function [dbo].[RemoveExtraChars] ( @p_OriginalString varchar(50) )
returns varchar(50) as
begin

declare @i int = 1; -- must start from 1, as SubString is 1-based
declare @OriginalString varchar(100) = @p_OriginalString Collate SQL_Latin1_General_CP1253_CI_AI;
declare @ModifiedString varchar(100) = '';

while @i <= Len(@OriginalString)
begin
if SubString(@OriginalString, @i, 1) like '[a-Z]'
begin
set @ModifiedString = @ModifiedString + SubString(@OriginalString, @i, 1);
end
set @i = @i + 1;
end

return @ModifiedString

end

然后,命令:

select dbo.RemoveExtraChars('aèàç=.32s df')

输出

aeacsdf

关于sql-server - 如何删除 sql-server 中的重音符号和所有字符 <> a..z?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4024072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com