Oracle字符串与数字比较

select 1 from lshspz where f_pzbh > 110012260
能查出数据来
select 1 from lshspz where f_jzfx >0
直接报 invalid number错误
咋回事?这两个字段均是varchar2型的
f_pzbh varchar2(9)
f_jzfx varchar2(1)
我就十分纳闷啦!

虽然同一个表,而且字段类型也相同,但是里面存储的字段值不一样,f_pzbh这个字段虽然是字符型,但是它里面的字段值全部都可以转化成Number类型,f_jzfx这个字段的值就不一定可以,这些都是我的猜测,你有时间的话可以测试一下。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-17
那肯定不能进行比较,比较的两个类型都不一样,一个是字符串另一个是数字,
有两种方式一个就是通过将字符串转换成数字类型to_number(需要转换的字段)但是保证这个字符串里都是数字,非数字会报错
另一个是转换成字符串TO_CHAR(转换的字段)追问

老大,你应该好好学学oracle自动类型转换了,不过谢谢你!

追答

Oracle比较字符串是根据ASCII码来的,第一个字母的ASCII大小比较如果相等再比较下一个,类推。

字符串和数字进行操作是会报异常的,因为类型不一样不能进行比较。
Oracle在执行SQL的时候有些时候会自动转换,比如:
select * from chan_customer cc where cc.customer_id = '1';
即使customer_id是数字型的也可以查出来,但是Oracle有区分字符和数字
就是通过加不加单引号来区分。

追问

你这个是别人说的,我也看过。不过我知道答案了,谢谢啦。也不是你说的转换成ascII码进行比较的,不信你可以试试 select '0'-5 from dual 到底应该是多少,O(∩_∩)O哈哈~ 那个问题我知道原因了,谢谢你了!

追答

那个是什么原因

追问

楼下是正解!

来自:求助得到的回答
第1个回答  2012-12-17
你的f_jzfx里面估计有非数字类型的字符串 。‘0’,‘9’ 这些是正常的,但是‘a’,‘h’这种就不正常,类似这种oracle不能自动转换成数字,所以报错。
第2个回答  2012-12-17
select 1 from lshspz where f_pzbh > '110012260'

select 1 from lshspz where f_jzfx >'0'

这样就可以了追问

老大,问题是
select 1 from lshspz where f_pzbh > 110012260

可以查出数据来

相关了解……

你可能感兴趣的内容

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