2009-10-28 105 views

回答

4

您可以將varchar轉換爲像一個十進制:

select * 
from YourTable 
where CAST(YourField AS decimal) < 40.00 

或者使用TO_NUMBER()功能:

select * 
from YourTable 
where TO_NUMBER(YourField) < 40.00 

如果該字段並不總是一個數字,你有一個相對較新的Oracle安裝時,您可以選擇行數字爲您的數字字段,如:

select * 
from (
    select * 
    from YourTable 
    where regexp_like(YourField, '^-?[[:digit:],.]+$') 
) sub 
where TO_NUMBER(YourField) < 40.00 
5

您可以使用TO_NUMBER函數將其轉換爲一個數字:

WHERE TO_NUMBER(col) > 39 

但是要注意:如果表中的任何行有在該列一個非數字進入,查詢可能會失敗,出現錯誤:

SQL> create table t (col varchar2(10)); 

Table created. 

SQL> insert into t values ('39.00'); 

1 row created. 

SQL> insert into t values ('40.00'); 

1 row created. 

SQL> insert into t values ('41.00'); 

1 row created. 

SQL> insert into t values ('xxx'); 

1 row created. 

SQL> select * from t where to_number(col) > 39; 
ERROR: 
ORA-01722: invalid number 
+0

+1指出的缺陷。 – 2009-10-28 14:14:06

4

如果要比較它們的號碼,然後使用TO_NUMBER函數Oracle 11g doc

我想建議,如果你要這樣對待一個號碼最好的辦法是改變你的架構/ DDL,以便40.00是存儲在一個數字字段中。這意味着比較起作用,訪問效率更高,例如,其中字段> x將使用索引 - 其中TO_NUMBER(字段)> x不使用索引,並且可以在插入時捕獲數據錯誤,而不必運行報告來查找非數字數據。

0
AND (TO_NUMBER(NVL(NAME_FIELD,'0'),'99999999D999','nls_numeric_characters=,.') > 0)