大查询 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 文本转整数的主要内容,如果未能解决你的问题,请参考以下文章
Postgres regexp_replace:无法用第一个捕获的组替换源文本