Hive SQL 查询中 Regexp_replace 的奇怪行为
Posted
技术标签:
【中文标题】Hive SQL 查询中 Regexp_replace 的奇怪行为【英文标题】:Strange behaviour of Regexp_replace in a Hive SQL query 【发布时间】:2020-01-13 06:12:52 【问题描述】:我有一些输入信息,我试图从输入中删除部分 .0
,其中 ID 字符串以 .0
结尾。
select student_id, regexp_replace(student_id, '.0','') from school_result.credit_records where student_id like '%.0';
输入:
01-0230984.03
12345098.0
34567.0
预期输出:
01-0230984.03
12345098
34567
但我得到的结果如下:它删除了任何带有0
的字符,而不是只删除以.0
结尾的字符
0129843
123498
34567
我做错了什么?有人可以帮忙吗?
【问题讨论】:
【参考方案1】:Dot in regexp 有特殊含义(表示任何字符)。如果您从字面上需要点 (.),则应使用双斜杠(在 Hive 中)对其进行屏蔽。还要添加行尾锚($):
with mydata as (
select stack(3,
'01-0230984.03',
'12345098.0',
'34567.0'
) as str
)
select regexp_replace(str,'\\.0$','') from mydata;
结果:
01-0230984.03
12345098
34567
正则表达式'\\.0$'
字面意思是点零(.0
),行尾($
)。
【讨论】:
只是想知道:如果我想在行首而不是行尾指定要删除的内容,那么我应该指定什么来代替$
??
@LearneR 起始锚点是 ^
像这样:'^0' - 表示开头为零以上是关于Hive SQL 查询中 Regexp_replace 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章