sql - 使用 regexp_like 在 dba_source 中搜索文本
问题描述
我需要搜索介于 'FROM' 和 'WHERE' 之间的每个文本dba_source
,我不知道我需要在 regexp_like 中使用什么模式才能获得预期的结果。
这根本不起作用:
select * from dba_source v
where regexp_like (upper(v.text), '(FROM)+\w+(WHERE)');
任何想法我做错了什么?
一些例子:
在 dba_source.text 中:
'FROM someschema.table WHERE[...]'
'FROM someschema2.table2, someschema3.table3 WHERE[...]'
'FROM someschema4.table4 WHERE[...]'
我只想得到结果:
'someschema.table'
'someschema2.table2, someschema3.table3'
'someschema4.table4'
解决方案
您的正则表达式没有意义,它需要一个类似的字符串FROM(a word)WHERE
,中间没有任何空格;此外,它区分大小写。
此外,regexp_like
仅检查值是否与正则表达式匹配,而我知道您正在寻找实际从值中提取数据。因此,您应该regexp_substr
改用。
无论情况如何,这都会提取FROM
和之间的值。WHERE
SELECT
REGEXP_SUBSTR(v.text, 'FROM(.*)WHERE',1 ,1 ,'i', 1)
FROM dba_source v
推荐阅读
- angular - 模块
/node_modules/jest-preset-angular/preprocessor.js 在转换选项中找不到 - azure - Azure Key Vault 证书 - 创建基本约束 CA:True
- javascript - 更改工具提示的内容以反映 html 标签中的内容
- css - 有没有办法在不依赖 JavaScript 的情况下让这个 CSS 动画不那么笨重?
- python - 过滤掉我的查询集的重复项
- wordpress - 更新的数据库 - 现在无法登录到 wordpress 管理员 - 用户名无效
- kendo-ui - 基于复选框的选择不适用于引导主题
- c - 可以使用 mDNS 解析为链接本地地址吗?
- mysql - 如何使用并行插入语句在 MySQL 表中插入巨大的 Pandas 数据框?
- c - 二维矩阵的哪种表示更快