2013-08-27 42 views
0

我正在使用Oracle 10g並具有數據庫列Q1的數據類型爲varchar2的數據庫。該列主要保存float和int值。將字符串轉換爲oracle中的格式編號

我想運行一個查詢,將獲取值,但具有標準美國貨幣格式的值格式。例如,如果值爲3020,則查詢將返回3,020.00。

我試過以下,但都沒有工作。

SELECT TO_CHAR(Q1, '9,999.99') FROM TABLE1; 

ORA-01722: invalid number 
01722. 00000 - "invalid number" 


SELECT TO_CHAR(TO_NUMBER(Q1), '9,999.99') FROM TABLE1; 

ORA-01722: invalid number 
01722. 00000 - "invalid number" 

我也嘗試使用實際值而不是列名稱,第一個示例工作。 : -/

SELECT TO_CHAR('1234', '9,999.99') FROM TABLE1; //returns 1,234.00 

在此步驟之後,我回去,並嘗試添加格式掩碼TO_NUMBER(): SELECT TO_CHAR(TO_NUMBER(Q1, '9,999.99'), '9,999.99')FROM TABLE1;

ORA-01722: invalid number 
01722. 00000 - "invalid number" 

它還沒有工作。

有人可以解釋爲什麼這不適合我的專欄嗎?最初雖然是因爲列的數據類型不是數字,浮點數或整數,但即使在轉換爲數字後,我仍然得到相同的錯誤。任何幫助將不勝感激。

回答

1

這很可能意味着您在Q1中有非數值。

因此無論是過濾掉與這樣的值的行或代替它們(例如,用0.00

SELECT TO_CHAR(Q1, '9,999.99') 
    FROM table1 
WHERE REGEXP_LIKE(q1, '^[+-]?[.0-9]+$'); 

SELECT CASE WHEN REGEXP_LIKE(q1, '^[+-]?[.0-9]+$') 
      THEN TO_CHAR(Q1, '9,999.99') 
      ELSE '0.00' 
     END q1 
    FROM table1; 

這裏是SQLFiddle演示

2

你的Q1列是VARCHAR2嗎?你會想要做這樣的事情,那麼:

select to_char(to_number('3200'), '9,999.00') from dual 

或使用您的表/列參考文獻:

select to_char(to_number(Q1), '9,999.00') from table1; 

你只需要希望此列保存只有數字,沒有字母,特殊字符等等,否則你會得到

ORA-01722:無效數字

再次出現

錯誤。

相關問題