【问题标题】:Extract data in parentheses with Amazon-redshift使用 Amazon-redshift 提取括号中的数据
【发布时间】:2019-07-22 04:06:33
【问题描述】:

我在表格中有这些字符:

LEASE THIRD-CCP-MANAGER (AAAA)
THE MANAGEMENT OF A THIRD PARTY (BBBB / AAAA)

当我提取信息时:

AAAA
BBBB/AAAA

也就是说,我必须寻找模式并提取括号内的内容。

我正在尝试使用 REGEXP_SUBSTR 函数。

在amazon redshift中,如何提取括号中的字符?

谢谢

【问题讨论】:

  • 显示您尝试过的内容、问题所在等
  • regexp_substr(column,'([^)]*')。错误:不匹配的标记括号 ( 或 (。解析正则表达式时发生错误:'([^)]*>>>HERE>>>'。
  • 根据我的回答,您需要转义括号...

标签: sql amazon-web-services amazon-redshift


【解决方案1】:

使用position 查找括号索引(,然后使用substring

select 
substring(position('(' in 'LEASE THIRD-CCP-MANAGER (AAAA)'),position(')' in 'LEASE THIRD-CCP-MANAGER (AAAA)'))

或者你可以使用split_part

split_part('LEASE THIRD-CCP-MANAGER (AAAA)','(',2)

【讨论】:

    【解决方案2】:

    您可能正在为() 的含义而苦苦挣扎(查找“反向引用”)

    要告诉正则表达式您只是指字符 () 而没有它们的特殊含义,请使用 \“转义”它们

    regexp_substr(yourtable.yourcolumn,'\(.*\)')
    

    【讨论】:

    • 谢谢。我试过了,但它没有提取信息。我试过 split_part,但我想用正则表达式来做。 SPLIT_PART (SPLIT_PART (EXAMPLE_COLUMN, '(', 2), ')', 1)
    • @dapdap 似乎对我有用:sqlfiddle.com/#!4/68b32/2909(我知道它是 oracle,但语法与 redshift 相同)
    • 非常感谢,它有效。参数1和2是什么意思?
    • @dapdap 嗯,您可以通过阅读在线帮助找到答案。您是否尝试过阅读在线帮助?
    【解决方案3】:

    哇,太难了!

    这里是使用的语法:

    SELECT REGEXP_SUBSTR('One (Two) Three', '[(](.*)[)]', 1, 1, 'e')
    

    这将返回:Two

    似乎用\( 转义括号不起作用,但将它们放入[(] 确实有效。末尾的'e' 将“使用子表达式提取子字符串”。

    【讨论】:

      猜你喜欢
      • 2022-08-24
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      相关资源
      最近更新 更多