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

selectcount(*)numfromACCOUNT_LOGIN_STATtwhere1=1andlogin_auth_flag=1;selectcount(*)nu... 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
展开
 我来答
南宫月陌d4
推荐于2018-05-11 · TA获得超过2785个赞
知道大有可为答主
回答量:2048
采纳率:90%
帮助的人:752万
展开全部
这种情况属于char类型中存储的数据为数字型数据,在oracle中会默认把不加引号的数据隐性转成带引号的数据。
关于数据隐性转换的总结:
比较时,一般是字符型转换为数值型,字符型转换为日期型
算术运算时,一般把字符型转换为数值型,字符型转换为日期型
连接时(||),一般是把数值型转换为字符型,日期型转换为字符型
赋值、调用函数时,以定义的变量类型为准。
badkano
推荐于2016-11-16 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部
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())));
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式