sql - 使用正则表达式替换 select 语句中的 where 子句
问题描述
基本上我想使用正则表达式从下面的 select 语句中替换 where 子句。(这里有三个条件:1.所有者名称2.要包含的表3.要排除的表)
SELECT *
FROM all_tables
WHERE owner = 'XXXXXXXX'
AND (table_name LIKE '%_\_A' ESCAPE '\'
OR table_name LIKE '%_\_B' ESCAPE '\'
OR table_name LIKE '%_\_C' ESCAPE '\')
AND (table_name NOT LIKE statement for (P|Q)(R|S)D(.*)(_D$)')
到目前为止我做了什么?
在下面的选择语句中,我编写了 REGEXP_LIKE 以获取以 A 或 B 或 C 结尾的表名,并且对于遵循 (P|Q)(R|S)*(_D)) 之类的模式并且需要的表名具有相同的 NOT REGEXP_LIKE排除。
我知道这种方式 REGEXP_LIKE 和 NOT REGEXP_LIKE 不起作用,任何人都可以帮我找到上述 2 的一个正则表达式(regexp_like 而不是 regexp_like)。非常感谢
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX'
AND REGEXP_LIKE (table_name, '(.*)((A|B|C)$)', 'i')
AND WHERE NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i');
解决方案
如果我了解您要执行的操作,则以下内容应该有效:
SELECT table_name
FROM all_tables
WHERE owner = 'XXXXXXXX' AND
REGEXP_LIKE (table_name, '[ABC]$', 'i') AND
NOT REGEXP_LIKE(table_name,'^(P|Q)(R|S)D(.*)(_D$)', 'i')
第一个正则表达式说“在行尾之前接受任何带有类 [ABC] 字符的名称”。我按照给定的方式使用了您的第二个正则表达式。
祝你好运。
推荐阅读
- powershell - Powershell - 具有多个标头的 Invoke-RestMethod
- php - 使用 PHPMailer 和 ReCaptcha V2 联系我们
- javascript - 在JS中,需要参数的函数,在没有该参数或没有参数的情况下调用该函数时,它可以工作,为什么?
- javascript - 自定义架构字段类型可以在渲染后运行代码吗?
- node.js - 使用 nodejs/react/socket 实现一个协作文本编辑器,但由于 heroku 服务器速度慢而遇到问题
- firebase - 解决方案应用程序不崩溃
- powerbi - 按关系和切片器过滤的度量或列
- apache-spark - 为什么 Spark 阶段只有一个功能。而不是在地图阶段进行如此多的转换
- key - 我无法通过 ssh 连接到 terraform 中新创建的 ec2 实例
- python - 检查数据集中的 NaN 输入时,输入类型不支持 ufunc 'isnan'