ORACLE中where条件下字段如何简化

在oracle中提取数据包含三列A、B、C,要求条件是C列字段不能包含‘管理费’、‘咨询费’、‘服务费’、‘维修费’,如何设置条件,通用的写法是这样的:

```sql
SELECT A, B, C
FROM your_table
WHERE C NOT LIKE '%管理费%'
AND C NOT LIKE '%咨询费%'
AND C NOT LIKE '%服务费%'
AND C NOT LIKE '%维修费%';

```sql

但是,实际应用中我的条件特别多,不仅仅这几项费用,大概有50多个,如果还是这样写的话感觉好麻烦,有没有可以简化的写法,就是比如只写一次not like,类似于in那样。

【以下回答由 GPT 生成】

可以使用正则表达式来简化 WHERE条件中字段的写法。以下是具体的解决方案:

  1. 使用 REGEXP_LIKE 函数来判断字段C是否包含指定的费用类型。
  2. 构建一个正则表达式,其中包含所有要排除的费用类型,使用竖线 "|" 分隔每个费用类型。
  3. 在 WHERE条件中使用 REGEXP_LIKE 函数,并将正则表达式作为第一个参数传入,字段C作为第二个参数。
  4. 将负值参数传递给 REGEXP_LIKE 函数的第三个参数,以指示它应该返回反向匹配。
  5. 完整的 SQL 查询代码示例如下:

sql SELECT A, B, C FROM your_table WHERE NOT REGEXP_LIKE(C, '管理费|咨询费|服务费|维修费', 'i');

在上面的代码中,'i'选项是用于忽略大小写的。如果您不需要忽略大小写,可以省略该选项。

这样,您只需要在正则表达式中列出要排除的费用类型即可,而无需使用多次的 NOT LIKE 操作。如有50多个条件,可将所有的费用类型用竖线分隔,添加至正则表达式中即可。

如果您对具体编写的正则表达式不熟悉,也可以使用其他方式动态生成正则表达式,例如使用程序编写脚本来生成该正则表达式字符串。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

搜一下REGEXP_LIKE