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

Oracle SQL如何查询含数字的城市记录并排除Praha相关结果

问题说明

现有存储地址信息的数据库表,部分CITY字段值附带代表行政区编号的数字后缀,表结构及示例数据如下:

IDCITYCOUNTRY
1Praha 4CZE
2Dublin 1GBR
3Budapest 3HUN
4DublinGBR
5Praha 7CZE
6BudapestHUN

需求为提取CITY字段包含数字的所有记录,同时过滤掉CITY值包含Praha的条目。此前尝试搭配LIKE、NOT LIKE、!=运算符、子查询排除Praha记录、甚至直接过滤COUNTRY='CZE'的方案,均无法生效,始终返回全部带数字的记录,未排除Praha相关数据。

写法失效核心原因

这类筛选失效90%以上是逻辑运算符优先级问题:SQL中AND的运算优先级高于OR,如果写多个LIKE '%数字%'的匹配条件时没有给所有OR连接的数字判断条件加括号,NOT LIKE '%Praha%'的条件只会和最后一个数字判断条件做AND运算,前面的数字匹配条件只要命中就会返回结果,自然无法过滤Praha的记录。

可直接运行的Oracle SQL

简洁正则写法(推荐)

用Oracle自带的正则函数可以避免多条件OR的优先级坑,逻辑清晰不易写错:

SELECT ID, CITY, COUNTRY
FROM 替换为你的实际表名
WHERE
  -- 匹配CITY字段中包含任意0-9数字的记录
  REGEXP_LIKE(CITY, '[0-9]')
  -- 排除CITY包含Praha的记录,末尾'i'参数代表不区分大小写匹配,不需要可以删掉
  AND NOT REGEXP_LIKE(CITY, 'Praha', 'i');

基础语法写法(不依赖正则)

如果不想用正则函数,一定要给所有数字判断的OR条件整体加括号,强制逻辑判断顺序:

SELECT ID, CITY, COUNTRY
FROM 替换为你的实际表名
WHERE
  -- 所有数字判断条件必须放在括号内作为一个整体逻辑块
  (
    CITY LIKE '%0%' OR CITY LIKE '%1%' OR CITY LIKE '%2%' OR CITY LIKE '%3%'
    OR CITY LIKE '%4%' OR CITY LIKE '%5%' OR CITY LIKE '%6%' OR CITY LIKE '%7%'
    OR CITY LIKE '%8%' OR CITY LIKE '%9%'
  )
  AND CITY NOT LIKE '%Praha%';
结果验证

针对给出的示例数据,上述SQL执行后仅返回2条符合要求的记录,完全匹配需求:

IDCITYCOUNTRY
2Dublin 1GBR
3Budapest 3HUN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:45:40