Oracle: найти сумму столбца VARCHAR2(50 байт)
Я должен рассчитать сумму VARCHAR2(50 byte)
столбец в моей базе данных Oracle.
SQL-запрос:
SELECT city, sum(forests) as sum_forests FROM BurnedAreas GROUP BY city
Колонка forests
имеет тип данных VARCHAR2(50 byte)
Я уже пробовал некоторые функции, но они не работали:
TO_NUMBER()
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!!!