大查询 REGEXP_REPLACE 文本转整数

Posted

技术标签:

【中文标题】大查询 REGEXP_REPLACE 文本转整数【英文标题】:Big query REGEXP_REPLACE text to integer 【发布时间】:2020-11-20 20:52:45 【问题描述】:

如何从以下格式文本中提取整数值 例如,此文本 ($99.99) 应返回 -99。 和 99.99 应该返回 99 而 80 应该返回 80

我尝试使用[REGEXP_REPLACE][1](text, r'[^\d]+',"") 但是我对正则表达式不熟悉,我红了这个documentation但不明白如何使用。

【问题讨论】:

【参考方案1】:

试试下面(BigQuery 标准 SQL)

cast(regexp_replace(translate(text, '($)', '-'), r'\.\d*', '') as int64) int

如果应用于您问题的样本数据 - 输出是

【讨论】:

【参考方案2】:

使用

CAST(REGEXP_REPLACE(REGEXP_REPLACE(text, r'\(\$(\d+)\.\d+\)', r'-\1'), r'\.\d+$', '') as int64) int

请参阅 regex #1 proof 和 regex proof #2。

\(\$(\d+)\.\d+\)解释

--------------------------------------------------------------------------------
  \(                       '('
--------------------------------------------------------------------------------
  \$                       '$'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  \d+                      digits (0-9) (1 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  \)                       ')'

\.\d+$解释

--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  \d+                      digits (0-9) (1 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

【讨论】:

顺便说一句,注意 - 这是用于 BigQuery - 所以 '-$1' 应该是 r'-\1' 不知道为什么这被赞成甚至两次 - 它只是不起作用!尝试例如 $99.99(99.99)

以上是关于大查询 REGEXP_REPLACE 文本转整数的主要内容,如果未能解决你的问题,请参考以下文章

静态主席树总结(静态区间的k大)

BigQuery REGEXP_REPLACE

REGEXP_REPLACE 用相同的小写文本替换文本

Postgres regexp_replace:无法用第一个捕获的组替换源文本

Hive SQL 查询中 Regexp_replace 的奇怪行为

PySpark 的 Regexp_replace 解释