我的表是:然后查询语句是:我的想法是:理论上应该输出2
也就是order_info_id为2的这个值
但是实际上什么也没查到;没有查到这个字段的结果
是后面不能加等号吗?
如果不加等号,结果是:
如果不加等号不应该是1,2都输出吗?为什么会这样?

解决方案 »

  1.   

    你把语句改成这样,看看结果是什么:
    select order_Info_id,set_out_time,IFNULL(set_out_time,2) from order_info  
      

  2.   

    另外,就是IFNULL(set_out_time,2) = 2最好是set_out_time的类型和返回的值的类型一致,比如set_out_time是日期型,那么最好返回的也是,比如改为:select order_Info_id from order_info where IFNULL(set_out_time,'2013/10/21') = '2013/10/21'  
      

  3.   

    这种处理和我要表达的意思有点不一样了,只是我最初是想用这个IFNULL来处理where条件后的and之间的连接方式,使得即使某些项为空后仍然还可以比较,只要剩下来的不为空的和字段进行比较都相等,那么也可以,而不是一味的当某项不成立后,where条件的结果就为false了;
    说得具体一点就是:
    我现在页面有很多文本框,那么我要做查询,这么多文本框一起提交,我用一条而不是多条DCL来达到这样的效果:即使某项文本框为空,只要剩下来不为空的文本框与数据库里面的记录匹配的话,那么还是可以查询出结果(当然and 连接在此处就有问题了,所以我才想到这种方式了)
      

  4.   

    能用is null吗,比如:select order_Info_id from order_info where set_out_time is null
      

  5.   

    看一下我运行的结果:
    ,可以看出只要不为空,那么后面都是true的,无论是整型还是字符(串)
    ps:上面的那种直接写出'2013/10/21',应该是字符串吧,应该有方法可以转换的,date_format(日期,'%Y-%m-%d')之类吧!
    而且下面的可以看到:即使set_out_time 为空,那么代替的字符串应该和外面的一样啊,但是为什么还是查不出id为2 呢?
      

  6.   


    会不会你的set_time_out里不是null,而是空串呢
      

  7.   


    会不会你的set_time_out里不是null,而是空串呢
    之前id为2的那条记录的确是为空字符,因为之前有字符,我删掉了,然后误以为为空,于是我插入了一些数据,真正为空的就被查出来了!
      

  8.   

    where 后面是数字 表示为真,所有的值都出来.mysql判断空值与sql server不一样?
    try:
    where LENGTH(字段)=0
      

  9.   


    会不会你的set_time_out里不是null,而是空串呢即使不把它转换为日期类型,直接当做整型也还是可以得到答案啊!
    那么我再多问一下:日常项目中,做类似的项目查询,有些空,有些不为空,也要你查出结果,处理方式除了在逻辑代码语句中if,else之类判断,还有其它的办法吗?(不知道我这种可不可行),只用一条语句查询出结果!
      

  10.   


    可以查出来为空串的记录,但是无法查出为空的记录,这个id为2 的记录对应的set_out_time其实是空字串;
    前面分析了,where后面只要不是空,空字符串,都是可以成立的那么就可以知道,为0,为非整型的字符串也是不可以的,是不是可以推断,mysql里面自动将整型类的字符转换为整型运算了?
      

  11.   


    我觉得应该是,where后面就是一个布尔值,要么就是true,要么就是false,比如,0就是false,而'a'好像没办法转化为整数,所以返回false,而1,-1都是true
      

  12.   


    会不会你的set_time_out里不是null,而是空串呢即使不把它转换为日期类型,直接当做整型也还是可以得到答案啊!
    那么我再多问一下:日常项目中,做类似的项目查询,有些空,有些不为空,也要你查出结果,处理方式除了在逻辑代码语句中if,else之类判断,还有其它的办法吗?(不知道我这种可不可行),只用一条语句查询出结果!呵呵,一般都用这个办法,这个挺好的,唯一的缺点就是用了ifnull函数,可能导致相关字段上的索引用不上了
      

  13.   


    我觉得应该是,where后面就是一个布尔值,要么就是true,要么就是false,比如,0就是false,而'a'好像没办法转化为整数,所以返回false,而1,-1都是true-1我还是有点想不通,不过既然是这么的,也没有办法了!对mysql不是很熟悉,今天要用到那个查询的东东,所有就大胆地做了一下,不知道可以不可以,还需要试试!