Oracle varchar的数据想比较大小 如何转换成数字int

如题所述

第1个回答  2015-01-07
select trunc(to_number('123.123')) from dual;追问

select *from table where to_number(字段)<25

这样写就出错,怎么办

追答

是不是你的这一列包含有非数值型的数据,比如英文字母,_%&*等符号?

追问

有空值

追答

select *from table where to_number(NVL(字段,'0'))<25

追问

追答

select 后面加一个 *

追问

哦对

追答

运行以下语句,找出Z5_HD列中包含有非法字符的记录:
select * from z_jczb_lunyuanjiance where translate(z5_hd,'$1234567890','$') is not null

追问

执行失败:ORA-00911: invalid character

select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890',$)is not null

追答

select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890','$')is not null

追问

数据库有很多沈这样的数据想查询25以下的数据

追答

这不是刚才我给你的语句的运行结果吧?

追问

不是

最后的照片是数据库的数据

追答

你把刚才我给你的语句运行以下,看一下语句有没有结果。如果有结果,是没办法比较的,必须数据清理后再比较。

追问

追答

把$用单引号引起来:
select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890','$')is not null

追问

追答

再执行一下这条语句看一下结果:
select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890.','$')is not null

追问

追答

看见了吗,查询出来的Z5_HD列有非数值型的数据,无法比较

追问

这些数据都是以前的

如果是最近1个月的就行

我试试谢谢

追答

select *from z_jczb_lunyuanjiance where to_number(z5_hd)<25 and sysdate-riqi<=30

试一下

追问

追答

select * from (select * from z_jczb_lunyuanjiance where where sysdate-riqi<=30) A where to_number(z5_hd)<25

追问

3个where可以吗?

执行失败:ORA-00936: missing expression

select * from (select * from Z_JCZB_LUNYUANJIANCE where where sysdate-RIQI<=30) A where to_number(Z5_HD)<25

能不能排除不能转换的数据

追答

select * from (select * from Z_JCZB_LUNYUANJIANCE where sysdate-RIQI<=30) A where to_number(Z5_HD)<25

或者排除非法数据:
select * from (select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890.','$') is null) A where to_number(Z5_HD)<25

追问

执行失败:ORA-01722: invalid number

select * from (select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890.','$') is null) A where to_number(Z5_HD)<25

这个没转换数字也可以查,貌似结果还是对的

字符串比较应该不会是对的吧

追答

字符串比较有可能结果是错误的,比如字符串:241.56比25.5小

追问

用to_number就失败呢

从第一个结果看,里面没有特殊字符

追答

select * from (select * from Z_JCZB_LUNYUANJIANCE where TRANSLATE(Z5_HD,'$1234567890.','$') is null) A where to_number(Z5_HD)<25

这个语句试一下

追问

要不我查出全部用java转换int

真找不到人帮忙了,感谢

可以加您QQ可以吗

从来没用过函数

在sql里面运行就失败

您看这个行吗?

本回答被网友采纳
第2个回答  2015-01-07
如果你的数据都是数字,那么用to_number()函数转换,如果你数据含有字母,那么直接比较追问

数据里面大部分是能转换的

有一下是输入不规范有特殊字符

select *from z_jczb_lunyuanjiance where to_number(z5_hd)<25

我想把能转换的查出来

把不能转换的查出来

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网