例如,a varchar值为“40.00”,并希望将其与运算符“>”一起使用或“<”在where子句中。我该如何使用它?
答案 0 :(得分:5)
您可以将varchar转换为小数,如:
select *
from YourTable
where CAST(YourField AS decimal) < 40.00
或使用TO_NUMBER()功能:
select *
from YourTable
where TO_NUMBER(YourField) < 40.00
如果该字段并非总是一个数字,并且您有一个相对较新的Oracle安装,则可以选择YourField为数字的行,如:
select *
from (
select *
from YourTable
where regexp_like(YourField, '^-?[[:digit:],.]+$')
) sub
where TO_NUMBER(YourField) < 40.00
答案 1 :(得分: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
答案 2 :(得分:4)
如果您想将它们作为数字进行比较,请使用TO_NUMBER函数Oracle 11g doc
我建议如果你想这样对待一个数字,最好的方法是改变你的架构/ DDL,以便40.00存储在一个数字字段中。这意味着比较工作,访问更有效,例如where field&gt; x将使用索引 - 其中TO_NUMBER(字段)&gt; x不使用索引,并且可以在插入时捕获数据错误,而不必运行报表来查找非数字数据。
答案 3 :(得分:0)
AND (TO_NUMBER(NVL(NAME_FIELD,'0'),'99999999D999','nls_numeric_characters=,.') > 0)