sql—如何处理具有varchar值以及以科学格式显示的大量数字的列?

xcitsw88  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(235)

我正在将csv文件中的数据加载到aws雅典娜的表中。有一个字符串列具有varchar值,例如 ABC123123 大量的数字,比如 2588000000 (以科学格式2.588e+10显示)在解析csv时,我只想将科学格式转换为float,以便在 2588000000 而不是科学的形式。我尝试了以下方法: SELECT ..., cast(column2 as float) FROM "db"."table" 但我显然不能转换为float,因为同一列中有varchar值。
我还尝试了以下方法:

SELECT column1, 
(CASE 
        WHEN column2 like '%E-%' THEN CAST(column2 AS FLOAT))
        WHEN column2 like '%E+%' THEN CAST(column2 AS FLOAT))
        ELSE column2
END)

FROM "db"."table"

雅典娜犯了这个错误

感谢您的帮助!

rur96b6h

rur96b6h1#

尝试 try :

SELECT coalesce(try(cast(cast(col AS doub) AS varchar)), col)
FROM ...

然而,至少在当前的presto中,双数字最终被转换为 varchar 用科学记数法,所以你可能需要 decimal :

SELECT
  coalesce(
    try(
      cast(cast(cast(col AS double) AS decimal(38,19)) AS varchar)),
      col)
FROM ...
yqhsw0fo

yqhsw0fo2#

嗯。你需要一个 case 表达式返回字符串。因此,将浮点值格式化为字符串:

SELECT column1, 
       (CASE WHEN REGEXP_LIKE(column2, '^[0-9]+E[+-]?[0-9]+$')
             THEN FORMAT('%f', CAST(column2 AS FLOAT))
             ELSE column2
        END)
FROM "db"."table"

相关问题