如何不使用REPLACE函数去除SQL查询字段内的特殊字符
重音字符批量转无重音格式实现方案
失效原因说明
你此前使用的Cyrillic_General_CI_AI是西里尔语系专用排序规则,仅对俄语等西里尔字符生效,无法处理法语、西语等带重音的拉丁字符,因此执行后无转换效果。
分数据库实现方案
所有方案均支持50万行级数据批量处理,无需提前定位特殊字符位置,转换后可统一转为你示例要求的大写无重音格式。
1. SQL Server 环境
查询转换示例:
SELECT UPPER(COLLEGE_NAME COLLATE SQL_Latin1_General_CP1_CI_AI) AS COLLEGE_NAME_CLEAN FROM SCHOOLS
永久更新字段内容示例:
UPDATE SCHOOLS SET COLLEGE_NAME = UPPER(COLLEGE_NAME COLLATE SQL_Latin1_General_CP1_CI_AI)
- 规则说明:
SQL_Latin1_General_CP1_CI_AI中的AI代表重音不敏感,转换时自动将带重音的拉丁字符替换为对应无重音版本,外层UPPER函数统一转换为大写。
2. MySQL 环境
查询转换示例:
SELECT UPPER(CONVERT(COLLEGE_NAME USING utf8mb4) COLLATE utf8mb4_general_ci) AS COLLEGE_NAME_CLEAN FROM SCHOOLS
永久更新字段内容示例:
-- 先修改字段排序规则 ALTER TABLE SCHOOLS MODIFY COLUMN COLLEGE_NAME VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 批量更新为大写无重音格式 UPDATE SCHOOLS SET COLLEGE_NAME = UPPER(COLLEGE_NAME);
3. PostgreSQL 环境
首先开启unaccent扩展:
CREATE EXTENSION IF NOT EXISTS unaccent;
查询转换示例:
SELECT UPPER(unaccent(COLLEGE_NAME)) AS COLLEGE_NAME_CLEAN FROM SCHOOLS
永久更新字段内容示例:
UPDATE SCHOOLS SET COLLEGE_NAME = UPPER(unaccent(COLLEGE_NAME));
4. Oracle 环境
查询转换示例:
SELECT UPPER(UTL_I18N.TRANSLITERATE(COLLEGE_NAME, 'US7ASCII', 'UTF8')) AS COLLEGE_NAME_CLEAN FROM SCHOOLS
永久更新字段内容示例:
UPDATE SCHOOLS SET COLLEGE_NAME = UPPER(UTL_I18N.TRANSLITERATE(COLLEGE_NAME, 'US7ASCII', 'UTF8'));
内容的提问来源于stack exchange,提问作者comp_user
相关产品推荐
相关产品推荐

