Как работать со столбцом, который имеет значения varchar, а также большие числа, которые отображаются в формате scientifi c? - PullRequest
0 голосов
/ 04 августа 2020

Я загружаю данные из файлов csv в таблицы в AWS Athena. Существует строковый столбец со значениями varchar, такими как ABC123123, и действительно большими числами, такими как 2588000000 (отображается в scientifi c формате 2.588E + 10) при разборе csv, и я хочу преобразовать только scientifi c формат с плавающей точкой, чтобы он отображался в формате 2588000000, а не в формате scientifi c. Я пробовал следующее:

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

Но я, очевидно, не могу использовать CAST как 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" 

И Афина выдала эту ошибку введите описание изображения здесь

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Попробуйте try:

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

Однако, по крайней мере, в текущем Presto, двойные числа в конечном итоге приводятся к varchar с обозначением scientifi c, поэтому вы может потребоваться от go до decimal:

SELECT
  coalesce(
    try(
      cast(cast(cast(col AS double) AS decimal(38,19)) AS varchar)),
      col)
FROM ...
0 голосов
/ 04 августа 2020

Хмммм. . . Вам нужно, чтобы выражение 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" 
...