各位大虾 我要做一个多个输入条件的查询 有的输入条件可能为空 但输入条件为空时 就不查那个条件 请问大家怎么做的 除了拼字符串 我用nvl函数能做吗 因为不能这么赋值 nvl(列名,not null) 是所以不知道怎么用nvl可以实现 例如 select * from order where buyer=? and re=? 

解决方案 »

  1.   

    nvl函数怎么用的~~
    不懂~~数据库没学好~~
      

  2.   

    hibernate查询就可以直接放对象
      

  3.   

    可以组成一个动态的SQL 语句啊 ,没必要搞什么NV吧 ...
      

  4.   

    @sql =select * from Table1 where 1=1
    if(@column1 is not null)
     @sql = @sql+ @colum1value
    if(@colum2 is not null)
     @sql = @sql +@colum2value...如此..
      

  5.   

    select * from order where buyer=? and re=?
    我知道不多 我觉得 你查询 多个条件 直接用模糊查询 就OK了啊
    如果 为空 就全部查询 和你不限制条件是一样的效果 一般都这样
    select * from order where buyer like '%+表达市+%' and re like '%+表达式+%'
    这样 就可以把你想要的结果查询出来啊
      

  6.   

    用个分支
    if(xxx)
    {
    sql=sql+"and a=1"}
    if(xxx)
    {
    sql=sql+ and b=2
    }
      

  7.   

    可以like来处理模糊的查询的啊
      

  8.   

    当然是拼条件了。NVL在这不是这种作用的,NVL是字段值如果为空就给出默认值
      

  9.   

    目前用到的最好方法String sql = new String("select * from order where (:useBuyer=1 or buyer=:buyer) and (:useRe=1 or re=:re");
    Query query = em.createQuery(sql)
    .setParameter("useBuyer",1)
    .setParameter("buyer","")
    .setParameter("useRe",0)
    .setParameter("re","a");
      

  10.   

    可以通过判断的啊 
    例如:if(userName==null){
       userName = "like %";
    }全部用like语句来查询啊最后把各个查询的字段给链接起来就可以哦
      

  11.   

    select * from order where buyer=? and re=? 
    中加一个1=1的条件就可以了吧。不知道你说的是不是这个意思
    select * from order where buyer=? and re=? and 1=1;
    无论什么情况下都会从在条件。
    select * from order where 1=1;
      

  12.   

    如果在存储地过程里面写可以这样
    sql server:
    select * from order where buyer=isnull(@buyer, buyer) and re=isnull(@re, re);oracle:
    select * from order where buyer=nvl(p_buyer, buyer) and re=nvl(p_re, re);
      

  13.   

    nvl不能用在查询条件中,你这样的情况可以求助于框架,iBatis就不错,我工作一般都是用这个了.
      

  14.   

    推荐使用ibatis,
    多几个包和配置文件,
    得到很好的灵活性。good luck
      

  15.   

    对于这个问题,你可做这样一种操作
    select * from 表 where 1=1 
    之后,对于条件
    String wherevalue="";
    if(变量1!=null)
    wherevalue=" and 字段1=?"
    if(变量2!=null)
    wherevalue=" and 字段2=?"
    ……之后,赋值也有同样的操作方法,即可搞定啦!就这么简单啦!
      

  16.   

    sql="select * from order where 1=1"
     
    用分支语句  
    if(a!=null)
    sql=sql+"and a=??";
    if(b!=null) 
    sql=sql+"and b=??";
    有多少个条件就写多少个
      

  17.   


    StringBuffer sb = new StringBuffer();
    sb.append("SELECT voucher_id, sequence, documention, to_char(voucher_date, 'yyyy-mm-dd')voucher_date, brief, borrow, lender FROM vouchers WHERE 1=1 ");
        if (null != vv) {
            if (null != vv.getVoucher_date()&& !"".equals(vv.getVoucher_date())) {
        sb.append(" AND voucher_date=to_date('");
        sb.append(vv.getVoucher_date());
        sb.append("','yyyy-mm-dd HH24:MI:SS')");
    }
    if (null != vv.getDocumention() && !"".equals(vv.getDocumention())) {
        sb.append(" AND documention='").append(vv.getDocumention()).append("'");
    }
    if (null != vv.getSequence() && !"".equals(vv.getSequence())) {
        sb.append(" AND sequence=").append(vv.getSequence());
    }
    if (null != vv.getBrief() && !"".equals(vv.getBrief())) {
        sb.append(" AND brief='").append(vv.getBrief()).append("'");
    }
            if (null != vv.getBorrow() && !"".equals(vv.getBorrow())) {
        sb.append(" AND borrow='").append(vv.getBorrow()).append("'");
    }
    if (null != vv.getLender() && !"".equals(vv.getLender())) {
        sb.append(" AND lender='").append(vv.getLender()).append("'");
    }
        }
                sb.append(" ORDER BY voucher_id desc");