You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何筛选匹配去除特殊符号后值相同的字符串数据

实现思路

核心是通过正则替换清除所有非字母、数字的特殊字符得到标准化字符串,再通过自关联匹配标准化后值相同但原始值不同的行,同时过滤无匹配项和重复配对的结果,确保输出符合列定义要求。


不同数据库参考语句

替换语句中的your_table_name为你的实际表名即可使用。

MySQL 8.0+

SELECT 
  ROW_NUMBER() OVER (ORDER BY t1.id) AS id,
  t1.column1 AS column1,
  t2.column1 AS column2
FROM 
  your_table_name t1
  JOIN your_table_name t2 
    ON REGEXP_REPLACE(t1.column1, '[^a-zA-Z0-9]', '') = REGEXP_REPLACE(t2.column1, '[^a-zA-Z0-9]', '')
WHERE 
  t1.column1 <> t2.column1
  AND t1.id < t2.id
  -- 保证column1为纯字母数字的无特殊符号值,column2为带特殊符号的原值
  AND t1.column1 NOT REGEXP '[^a-zA-Z0-9]'
  AND t2.column1 REGEXP '[^a-zA-Z0-9]'
ORDER BY t1.id;

PostgreSQL

SELECT 
  ROW_NUMBER() OVER (ORDER BY t1.id) AS id,
  t1.column1 AS column1,
  t2.column1 AS column2
FROM 
  your_table_name t1
  JOIN your_table_name t2 
    ON REGEXP_REPLACE(t1.column1, '[^a-zA-Z0-9]', '', 'g') = REGEXP_REPLACE(t2.column1, '[^a-zA-Z0-9]', '', 'g')
WHERE 
  t1.column1 <> t2.column1
  AND t1.id < t2.id
  AND t1.column1 !~ '[^a-zA-Z0-9]'
  AND t2.column1 ~ '[^a-zA-Z0-9]'
ORDER BY t1.id;

SQL Server 2017+

SELECT 
  ROW_NUMBER() OVER (ORDER BY t1.id) AS id,
  t1.column1 AS column1,
  t2.column1 AS column2
FROM 
  your_table_name t1
  JOIN your_table_name t2 
    ON REGEXP_REPLACE(t1.column1, '[^a-zA-Z0-9]', '') = REGEXP_REPLACE(t2.column1, '[^a-zA-Z0-9]', '')
WHERE 
  t1.column1 <> t2.column1
  AND t1.id < t2.id
  AND t1.column1 NOT LIKE '%[^a-zA-Z0-9]%'
  AND t2.column1 LIKE '%[^a-zA-Z0-9]%'
ORDER BY t1.id;

内容的提问来源于stack exchange,提问作者olan24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:54:03