[英]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 使其更具可读性。
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.