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
),即行尾 ($
)。
我有一些输入信息,我试图从输入中删除 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
),即行尾 ($
)。