1. 今天在做项目时,发现从数据库中取出的结果总与预期的不一样,最后发现有人把一条sql把字符串当作数值进行比较大小,模拟如下:
创建表:
SQL> create table t(t1 number(3),t2 varchar2(3));
插入数据:
SQL> insert into t values(1,'1');
SQL> insert into t values(2,'5');
SQL> insert into t values(3,'11');
SQL> insert into t values(4,'15');
SQL> insert into t values(5,'111');
SQL> insert into t values(6,'155');
测试:
SQL> select * from t where t2>16;
T1 T2
---------- ---
5 111
6 155
SQL> select * from t where t2>'16';
T1 T2
---------- ---
2 5
注意,当把字符串当做数值进行比较时,返回两行数据,而直接进行字符串比较则只返回一行数据,而且两条sql所返回的数据是不一样的,
Oracle比较字符串是根据ASCII码来的,第一个字母的ASCII大小比较如果相等再比较下一个,所以上述两条sql是完全不相等,在以后的开发中,
一定要正确设定列的数据类型,不能让oracle进行隐式类型转换,不然结果与你想要的相差甚远。