如何处理具有 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 ...
我正在将数据从 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 ...