2017-06-30 59 views
0

我必須計算我的Oracle數據庫中的VARCHAR2(50 byte)列的總和。Oracle:查找VARCHAR2(50字節)列的總和

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等。

有沒有人有任何解決方案?

+0

逗號代表小數點嗎? –

+0

是的,在這兩種情況下,點和逗號代表小數點。 – ktsigkounis

+0

那麼這一列有多少種不同的格式?你說小數分隔符有時候是逗號,有時候是一個點。也可以有一千個分離器嗎?是否還有其他的價值觀,如'兩','沒有','n.a.',''之類的? –

回答

0

正如我所提到的VARCHAR列中的數據有一個格式像4.900,25其中點是百個分離器和逗號小數分隔(2張十進制數)。

所以要找到總和,我用TO_NUMBER功能一些更多的參數

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

0
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!!! 
0

下面的代碼會跳過非數字數據,您不會收到錯誤。

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

OR

插入在臨時表&的所有數據,然後做總和。因爲你的專欄有「,」這是使價值無效。

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

然後運行下面的數據。

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

但是這有點像將寶寶扔出洗澡水,因爲這樣總和就不會反映真正的邏輯值。 –