[英]How to use Oracle 10g REGEXP_SUBSTR to extract a string using a string delimiter
[英]How can I extract a word from a string using Oracle regexp_substr?
我正在尝试使用 Oracle 12c regexp_substr 从字符串中提取一个单词,但没有运气理解它的工作原理,网络中的信息太多,我感到困惑。
所以我想从字符串中提取tmp*
表:
query_str
:
select
column1 c1,
column2 c2
from tmp_123 foo1, -- some comments here
TAB1_123 TAB1
where 1=1
;
尝试使用它但没有“运气”:
select regexp_substr(query_str, 'TMP_[A-z]+', 1, 1, 'i');
我想提取直到空格和 tmp 表名可以像这样在中间有数字: tmp_123
。
有什么建议吗?
主要问题是显示的 SELECT 语句在需要 FROM 子句的 Oracle 中无效。 这是一个如何使这项工作的示例:
WITH cteData
AS (SELECT 'select' AS QUERY_STR FROM DUAL UNION ALL
SELECT 'column1 c1,' AS QUERY_STR FROM DUAL UNION ALL
SELECT 'column2 c2' AS QUERY_STR FROM DUAL UNION ALL
SELECT 'from tmp_123 foo1, -- some comments here' AS QUERY_STR FROM DUAL UNION ALL
SELECT 'TAB1_123 TAB1' AS QUERY_STR FROM DUAL UNION ALL
SELECT 'where 1=1' AS QUERY_STR FROM DUAL UNION ALL
SELECT ';' AS QUERY_STR FROM DUAL)
select regexp_substr(query_str, 'TMP_[A-z]+', 1, 1, 'i') AS MATCH
FROM cteData
WHERE regexp_substr(query_str, 'TMP_[A-z]+', 1, 1, 'i') IS NOT NULL
在这里,我将您的数据逐行放入名为“cteData”的公用表表达式 (CTE) 中,然后 SELECT 将其用作其数据源。 这将返回该行
tmp_123 foo1, -- some comments here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.