oracle数据库中CHAR类型数据为什么加引号不加引号都能查询?

select count(*) num from ACCOUNT_LOGIN_STAT t where 1=1
and login_auth_flag = 1 ;
select count(*) num from ACCOUNT_LOGIN_STAT t where 1=1
and login_auth_flag = '1';

上面两个SQL在PL/SQL中都能查询,但是在JAVA代码调用的时候,第二个SQL就查询不到值,第一个可以查询到值。数据层是ibatis

这种情况属于char类型中存储的数据为数字型数据,在oracle中会默认把不加引号的数据隐性转成带引号的数据。
关于数据隐性转换的总结:
比较时,一般是字符型转换为数值型,字符型转换为日期型
算术运算时,一般把字符型转换为数值型,字符型转换为日期型
连接时(||),一般是把数值型转换为字符型,日期型转换为字符型
赋值、调用函数时,以定义的变量类型为准。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-16
char类型是固定长度的字符型,也就是譬如你设置的char(4)
当你这个字段里是1,它会在后边补空格的,这个当然不仔细看是看不出来的
所以你第二个写法要查的时候加个函数吧

select count(*) num from ACCOUNT_LOGIN_STAT t where 1=1
and trim(login_auth_flag) = '1';

这样应该就可以了追问

select count(*) num from ACCOUNT_LOGIN_STAT t where 1=1
and trim(login_auth_flag) = '1';
在代码中这样写查不出数据,如果能查出数据,我就不觉得奇怪了,原来bean中该对象的值是String,传到后台查询不到值,后来我将该bean的值改成下面的代码才查询出值。
paramList.add(new DataParam("loginAuthFlag", DataType.INT,
Integer.parseInt(accountLoginInfoBean.getLoginAuthFlag())));

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

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