Oracle SQL查询:筛选Customer表中Identity列不以aa.sam.、bb.test.开头的记录
Oracle 端 Customer 表筛选查询实现
需求逻辑对齐
结合你提供的表结构、样例数据、预期输出,先明确存在的逻辑描述偏差:
- 你的表仅包含
Name、Identity两个字段,样例中的S.no为展示用的行序号,并非表内字段 - 若严格按照“排除所有以
aa.sam.、bb.test.为前缀的Identity值”的规则执行,最终结果仅会保留Rob Boucher一条记录 - 从你给出的预期输出反推,实际筛选规则为:排除所有
Identity以bb.test.为前缀的记录,同时排除Name为Asif Ali的条目,最终保留Rob Boucher、Anil两条记录
可直接运行的SQL实现
Oracle中.为普通字符,可直接配合LIKE完成前缀匹配,无需额外转义。
匹配你给出的预期输出的版本
SELECT name, identity FROM Customer WHERE -- 过滤所有以bb.test.为前缀的Identity记录 identity NOT LIKE 'bb.test.%' -- 过滤Asif Ali的记录,匹配预期输出 name <> 'Asif Ali';
严格匹配最初文字需求的版本
如果确实需要排除所有Identity以aa.sam.或bb.test.为前缀的记录,直接使用如下SQL即可:
SELECT name, identity FROM Customer WHERE identity NOT LIKE 'aa.sam.%' AND identity NOT LIKE 'bb.test.%';
实用优化提示
- 若
Identity、Name字段已建索引,上述NOT LIKE '前缀.%'、<>判断的写法可触发索引的范围扫描,执行效率远高于正则表达式匹配 - 后续如果排除规则需要频繁调整,可将待排除的Name值、Identity前缀存入独立配置表,通过关联判断实现,避免硬编码带来的维护成本
内容的提问来源于stack exchange,提问作者MOHAMED AZARUDEEN
相关产品推荐
相关产品推荐

