提取 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+)\.'
下面的查询输出 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+)\.'