使用Oracle正则表达式查询筛选指定格式记录(排除Place ID 3、4)
Oracle正则表达式筛选目标记录方案
我来帮你搞定这个Oracle正则筛选的需求,直接上解决方案加详细解释:
完整SQL语句
假设你的数据表名为your_table,需要检查的目标字段为target_column,Place ID字段为place_id,对应的查询语句如下:
SELECT * FROM your_table WHERE ( -- 筛选存在前导或尾随空格的记录 REGEXP_LIKE(target_column, '^[[:space:]]+|[[:space:]]+$') OR -- 筛选下划线前后带有空格的记录(含前有空格、后有空格、前后都有三种情况) REGEXP_LIKE(target_column, '[[:space:]]_|_[[:space:]]') ) AND place_id NOT IN (3, 4);
各部分正则说明
1. 匹配前导/尾随空格
正则表达式 ^[[:space:]]+|[[:space:]]+$ 的含义:
^[[:space:]]+:匹配字段开头的一个或多个空白字符(包括空格、制表符等,若只想匹配普通空格,可替换为^ +)[[:space:]]+$:匹配字段结尾的一个或多个空白字符(同理,替换为+$可仅匹配普通空格)|:逻辑或,满足任意一种情况即符合条件
2. 匹配下划线前后带有空格
正则表达式 [[:space:]]_|_[[:space:]] 的含义:
[[:space:]]_:匹配“空白字符+下划线”的组合(下划线前有空格)_[[:space:]]:匹配“下划线+空白字符”的组合(下划线后有空格)|:逻辑或,覆盖下划线前有空格、后有空格,甚至前后都有空格的所有情况
3. 排除指定Place ID
place_id NOT IN (3, 4) 直接过滤掉Place ID为3和4的记录,确保结果集中不包含这两类数据。
可选补充
如果你的target_column可能存在NULL值,且需要将NULL也纳入筛选范围(因为REGEXP_LIKE对NULL会返回FALSE),可以在WHERE条件中额外添加:
OR target_column IS NULL
内容的提问来源于stack exchange,提问作者Raj Bhatia
相关产品推荐
相关产品推荐

