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

How to deal with a column that has varchar values as well as large numbers that show up as scientific format?

我正在将数据从 csv 文件加载到 AWS Athena 中的表中。在解析 csv 时,有一个字符串列具有 varchar 值,如 ABC123123 和非常大的数字,如 2588000000(以科学格式 2.588E+10 显示),我只想将科学格式转换为浮动,因此它显示在 2588000000 而不是科学格式。 我尝试了以下方法:

SELECT ..., cast(column2 as float) FROM "db"."table"

但我显然不能将 CAST 转换为浮点数,因为同一列中有 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" 

而 Athena 给出了这个错误

感谢任何帮助!

嗯嗯。 . .您需要 case 表达式到 return 字符串。因此,将浮点值格式化为字符串:

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" 

尝试 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 ...