繁体   English   中英

如何使用 Oracle regexp_substr 从字符串中提取单词?

[英]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 regexp_substr(query_str, 'TMP_\w+', 1, 1, 'i');
select regexp_substr(query_str, 'TMP_\S+', 1, 1, 'i');

\w+将匹配TMP_之后的字母数字或下划线字符,而\S+将匹配一个或多个非空白字符。

请参阅\w正则表达式演示\S正则表达式演示

主要问题是显示的 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

db<>在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM