从 ODI 表达式中的字符串中提取第二个单词

Extract the second word from a string in ODI Expression

这两种语法允许从 oracle 中的字符串中获取第二个单词

SELECT REGEXP_SUBSTR('Hello this is an example', '\s+(\w+)\s') AS syntax1,
       SUBSTR('Hello this is an example', 
              INSTR('Hello this is an example', ' ', 1, 1) + 1, 
              INSTR('Hello this is an example', ' ', 1, 2) 
              - INSTR('Hello this is an example', ' ', 1)
       ) AS syntax2 
  FROM dual;

结果:

syntax1  syntax2
-------  -------
this     this

我在 ODI(oracle 数据集成)工作,这两种语法在 ODI 中不起作用: 对于 ODI,正则表达式无效且 INSTR 函数仅接受 2 个参数

你能建议我一个可以在 ODI 中工作的解决方案吗?

谢谢。

然后,你可以应用SUBSTR()函数两次:

WITH t2(str) AS
(
 SELECT SUBSTR( TRIM( str ), INSTR( TRIM( str ), ' ') + 1, LENGTH( TRIM(str) ) )              
   FROM t --> original table
)   
SELECT SUBSTR( str, 1, INSTR(str, ' ') - 1 ) AS extracted_string           
  FROM t2

extracted_string
----------------
this

如果安装的 ODI 的版本是 12+,那么您也可以使用 REGEXP_REPLACE(),如下所示:

SELECT REGEXP_REPLACE(str, '(\w+)\s(\w+)( .*)', '' ) AS extracted_string
  FROM t

Demo

我觉得应该支持' [[:alpha:]]+ '

我终于用到了这个表达方式:

SELECT 
          SUBSTR (
             SUBSTR ('one two three four',
                     INSTR ('one two three four', ' ') + 1,
                     999999),
             0,
               INSTR (
                  SUBSTR ('one two three four',
                          INSTR ('one two three four', ' ') + 1,
                          999999),
                  ' ')
             - 1)
  FROM DUAL