在 spark sql 中将 0.0 转换为 0

问题描述 投票:0回答:2

我想写一个 spark sql 查询来转换数字如下:

9.82000 --> 9.82
40183.14 -> 40183.14
03234.00 -> 3234
0.0     --> 0

具有特定小数位的 Round() 将按原样返回尾随零(如 9.8200)。 trim(round())+0 删除尾随零但失败 0.0

有人可以尽快帮忙吗。

sql apache-spark apache-spark-sql decimal rounding
2个回答
0
投票

你可以用一个case解决这个问题。基本上是一个 if/else。

对于这个例子,列是

value
.

select
  case
  when value = 0.0 then 0
  else round(value, 2)
  end
from...

0
投票

您可以 rtrim 零,然后是小数点。

spark.sql("""WITH numbers AS (
               SELECT explode(array(9.8200, 40183.14, 03234.00, 0.0)) as n
             )
             SELECT rtrim('.', rtrim('0', n)) as formatted
               FROM numbers
          """).show
+---------+
|formatted|
+---------+
|     9.82|
| 40183.14|
|     3234|
|        0|
+---------+
© www.soinside.com 2019 - 2024. All rights reserved.