Oracle: найти сумму столбца VARCHAR2(50 байт)

Я должен рассчитать сумму VARCHAR2(50 byte) столбец в моей базе данных Oracle.

SQL-запрос:

SELECT city, sum(forests) as sum_forests FROM BurnedAreas GROUP BY city

Колонка forests имеет тип данных VARCHAR2(50 byte)

Я уже пробовал некоторые функции, но они не работали:

  1. TO_NUMBER()

  2. CAST()

Я считаю, что проблема заключается в том, что значения конкретного столбца имеют другой формат. Некоторые значения, как 5,37, другие, как 14,23 и т. Д.

У кого-нибудь есть решение?

3 ответа

Решение

Как я уже упоминал, данные в столбце VARCHAR имели формат, подобный 4.900,25, где точка была разделителем сотен и десятичным разделителем-запятой (2 десятичных знака).

Таким образом, чтобы найти сумму, я использовал TO_NUMBER функция с еще некоторыми параметрами.

SUM(TO_NUMBER(forests,'999G999G999D99','NLS_NUMERIC_CHARACTERS='',.'''))

Приведенный ниже код пропустит нечисловые данные, и вы не получите ошибку.

SELECT city, sum(forests) as sum_forests 
FROM BurnedAreas 
where ISNUMERIC (forests)=1
GROUP BY city

ИЛИ ЖЕ

Вставьте все данные во временную таблицу и затем выполните суммирование. потому что ваш столбец имеет ",", что делает значение недействительным.

SELECT city, replace(forests,',','') as forests 
 into #BurnedAreas
 FROM BurnedAreas 

Тогда беги ниже данных.

SELECT city, sum(forests) as sum_forests 
FROM #BurnedAreas 
GROUP BY city 
SELECT city,sum(to_number(replace(translate(forests, '(', '-'), ')', ''))) AS sum_forests
FROM BurnedAreas
GROUP BY city

Generally one need to check how the data flow is there for "forests" column.
Accordingly need to include the condition inside translate(...)

Hope that helps!!!
Другие вопросы по тегам