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

Oracle SQL:如何在表中筛选指定特殊字符(排除允许的波兰语字母等)

Oracle SQL筛选包含指定特殊字符的记录

问题分析

你需要筛选出包含!@#$%^&*_=[]{};<>这些特殊字符的记录,同时要排除波兰语字母ąśćół、符号-.,以及空白/换行符的误判。原SQL的问题在于正则字符集未包含波兰语字母,导致这些正常字母被当作特殊字符匹配,同时需注意指定特殊字符中的正则元字符(如[和])需要正确处理。

解决方案

方案1:直接匹配指定特殊字符

构造正则直接匹配目标特殊字符,对正则元字符[和]进行转义:

SELECT *
FROM your_table
WHERE REGEXP_LIKE(column_A, '[!@#$%^&*_=\[\]{};<>]')
   OR REGEXP_LIKE(column_B, '[!@#$%^&*_=\[\]{};<>]')
   OR REGEXP_LIKE(column_C, '[!@#$%^&*_=\[\]{};<>]')
   OR REGEXP_LIKE(column_D, '[!@#$%^&*_=\[\]{};<>]')
   OR REGEXP_LIKE(column_E, '[!@#$%^&*_=\[\]{};<>]');

方案2:排除允许字符,匹配剩余特殊字符

将所有允许的字符(含波兰语字母)加入正则的否定字符集,匹配所有不在允许列表中的字符(即你指定的特殊字符):

SELECT *
FROM your_table
WHERE REGEXP_LIKE(column_A, '[^0-9A-Za-ząśćół[:space:],.-]')
   OR REGEXP_LIKE(column_B, '[^0-9A-Za-ząśćół[:space:],.-]')
   OR REGEXP_LIKE(column_C, '[^0-9A-Za-ząśćół[:space:],.-]')
   OR REGEXP_LIKE(column_D, '[^0-9A-Za-ząśćół[:space:],.-]')
   OR REGEXP_LIKE(column_E, '[^0-9A-Za-ząśćół[:space:],.-]');

说明

  • 方案1更精准,仅匹配你指定的特殊字符;方案2会筛选所有不在允许列表内的字符(若存在其他未指定特殊字符也会被包含)。
  • 需确保数据库字符集为AL32UTF8或支持Unicode的字符集,否则波兰语字母ąśćół可能无法被正确识别。
  • [:space:]已包含空格、换行符等空白字符,无需额外添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:40