繁体   English   中英

SQL 查询查找并替换为正常字符串字符

[英]SQL Query to find and replace with the normal string character

我已将数据导入我的数据库,但在我的公司名称中发现了特殊字符。

特殊字符如下

特殊字符

Alecta Pensionsförsäkring, ömsesidigt

正常字符

Alecta Pensionsforsakring,Omsesidigt

特殊字符

Aelefónica, SA

正常字符

Aelefonica,SA

我尝试使用硬编码特殊字符的替换方法,但在实际数据中...包含 1000 条记录,我很难保留硬编码值...请给我一个 SQL 动态查询,它将找出特殊字符在一个字符串中。

原来的编码大概是UTF-8。

因此,您可以使用 UDF 使其更具可读性。

UDF 基于Xabi这个旧答案

CREATE FUNCTION Utf8ToUcs(@src varchar(MAX)) RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGIN DECLARE @i INT, @res NVARCHAR(MAX)=@src, @pi VARCHAR(18); SELECT @pi = '%[à-ï][€-¿][€-¿]%', @i = PATINDEX(@pi, @src COLLATE Latin1_General_BIN); WHILE @i > 0 SELECT @res = STUFF(@res,@i,3, NCHAR( ((ASCII(SUBSTRING(@src,@i,1))&31)*4096) +((ASCII(SUBSTRING(@src,@i+1,1))&63)*64) +(ASCII(SUBSTRING(@src,@i+2,1))&63))), @src = STUFF(@src,@i,3,'.'), @i = PATINDEX(@pi,@src COLLATE Latin1_General_BIN); SELECT @pi = '%[Â-ß][€-¿]%', @i = PATINDEX(@pi,@src COLLATE Latin1_General_BIN); WHILE @i > 0 SELECT @res = STUFF(@res,@i,2,NCHAR( ((ASCII(SUBSTRING(@src,@i,1))&31)*64) +(ASCII(SUBSTRING(@src,@i+1,1))&63))), @src = STUFF(@src,@i,2,'.'), @i = PATINDEX(@pi,@src COLLATE Latin1_General_BIN); RETURN @res; END;
 select col, dbo.Utf8ToUcs(col) as col_ucs from test
山口 col_ucs
Alecta Pensionsförsäkring, ömsesidigt Alecta Pensionsförsäkring, ömsesidigt
Aelefónica, SA 爱立信,SA
Áæâàéêèeeeeëöu Áæâàéêèeeeeëöu

然后你也可以删除重音。
这是通过排序规则完成的。 (从这里采取的解决方案)

 select col, cast(dbo.Utf8ToUcs(col) as varchar(100)) Collate SQL_Latin1_General_CP1253_CI_AI as col_cp1253 from test
山口 col_cp1253
Alecta Pensionsförsäkring, ömsesidigt Alecta Pensionsforsakring, omsesidigt
Aelefónica, SA Aelefonica, SA
Áæâàéêèeeeeëöu 啊啊啊啊啊啊啊

关于db<>fiddle 的演示在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM