Regexp_replace 在 Hive SQL 查询中的奇怪行为

Strange behaviour of Regexp_replace in a Hive SQL query

我有一些输入信息,我试图从输入中删除 ID 字符串以 .0.

结尾的部分 .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

我做错了什么?有人可以帮忙吗?

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

Regexp '\.0$' 字面意思是点零 (.0),即行尾 ($)。