【问题标题】:Reguar expression in SQL to match 3 world currency code, but not numbers after currency codeSQL中的正则表达式匹配3个世界货币代码,但不是货币代码后的数字
【发布时间】:2020-09-14 16:38:47
【问题描述】:

我正在尝试从字符串中提取货币代码

字符串如下所示: brand_sportswear|FOOTWEAR_FOOTWEAR_FOOTWEAR|footwear_footwear_footwear|12787274_12016989_12787233|EUR276.94 以货币结尾。

如果我使用 '\|[A-Z]{3}[1-9]' 我可以在最后得到货币,但这是输出:

|EUR2

如何才能只提取最后的货币代码?

对我来说放类似

的东西不太现实
'USD|EUR|JPY'

因为我有很多货币通过。

【问题讨论】:

  • 我相信 presto 允许前瞻,但不是积极的。试试\|[A-Z]{3}(?=[1-9]) 或者只是子串它。
  • 谢谢@ctwheels,我仍然在货币代码之前得到管道。所以 |EUR 而不仅仅是 EUR
  • 只使用substr(string, 2,3)怎么样?
  • 成功了,谢谢!
  • 我更新了我的答案,你可以使用捕获组,可能是最好的方法

标签: sql regex presto


【解决方案1】:

环顾四周

Presto 允许前瞻,因此您可以使用以下内容:

regexp_extract(string, '\|[A-Z]{3}(?=[1-9])')

但是,这不会删除管道 |

我不相信 Presto 目前允许后视。


捕获组

另一种选择是使用捕获组:

regexp_extract(string, '\|(A-Z{3})[1-9]', 1)

子字符串

或者,您可以使用以下方法对现有的正则表达式进行子串化:

substr(regexp_extract(string, '\|A-Z{3}[1-9]'), 2, 3)

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多