提取 Hive 中两个字符之间的数字 SQL

Extract number between two characters in Hive SQL

下面的查询输出 1642575.0。但我只想要 1642575 (只是没有小数点的数字和它后面的零)。字段中分隔值的数量各不相同。唯一不变的是总是只有一个数字带小数。我试图编写一个正则表达式函数来提取 ". 之间的数字。

如何修改我的 regexp_extract 函数以获得所需的输出?谢谢!

select regexp_extract('{"1244644": "1642575.0", "1338410": "1650435"}','([1-9][0-9]*[.][0-9]+)&*');

您可以将结果转换为 bigint

select cast(regexp_extract('{"1244644": "1642575.9", "1338410": "1650435"}','([1-9][0-9]*[.][0-9]+)&*') as bigint) col;
output - 1642575

如果要四舍五入可以用round

select round(regexp_extract('{"1244644": "1642575.9", "1338410": "1650435"}','([1-9][0-9]*[.][0-9]+)&*')) col;
output - 1642576

使用此正则表达式:'"(\d+)\.' - 表示双引号,捕获包含一位或多位数字的组,点。

select regexp_extract('{"1244644": "1642575.9", "1338410": "1650435"}','"(\d+)\.',1)

结果:

1642575

要跳过任意数量的前导零,请使用此正则表达式:'"0*(\d+)\.'