tba
开始日期 结束日期 单号
2012/2/1 2012/2/1 1111
2012/2/2 2012/2/2 1112
2012/2/3 2012/2/3 1113
2012/2/4 2012/2/4 1114
2012/2/5 2012/2/5 1115
2012/2/6 2012/2/6 1116
2012/2/7 2012/2/7 1117
2012/2/8 2012/2/8 1118
2012/2/9 2012/2/9 1119
2012/2/10 2012/2/10 1120
2012/2/11 2012/2/11 1121
2012/2/12 2012/2/12 1122
2012/2/13 2012/2/13 1123
2012/2/14 2012/2/14 1124
2012/2/15 2012/2/15 1125
2012/2/16 2012/2/16 1126
2012/2/17 2012/2/17 1127
2012/2/18 2012/2/18 1128
2012/2/19 2012/2/19 1129
2012/2/20 2012/2/20 1130
结果
开始日期 结束日期 单号
2012/2/5 2012/2/10 1115
2012/2/5 2012/2/10 1116
2012/2/5 2012/2/10 1117
2012/2/5 2012/2/10 1118
2012/2/5 2012/2/10 1119
2012/2/5 2012/2/10 1120
我的语句
 select * from tb1
  where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '%' 
结果显示为所有数据.语句应该要加上单号,但这样写不正确,应该怎么写呢?

解决方案 »

  1.   

    select * from tb1
      where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '%'  关键是这个or语句,like '%'全部了,所以都查出来了,单号 like '%'
    你是不是要下面的语句select * from tb1
      where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '111%'  
      

  2.   

    单号 like '%'-->单号 like '...%'
      

  3.   


    tba
    开始日期 结束日期 单号
    2012/2/1 2012/2/1 1111
    2012/2/2 2012/2/2 1112
    2012/2/3 2012/2/3 1113
    2012/2/4 2012/2/4 1114
    2012/2/5 2012/2/5 1115
    2012/2/6 2012/2/6 1116
    2012/2/7 2012/2/7 1117
    2012/2/8 2012/2/8 1118
    2012/2/9 2012/2/9 1119
    2012/2/10 2012/2/10 1120
    2012/2/11 2012/2/11 1121
    2012/2/12 2012/2/12 1122
    2012/2/13 2012/2/13 1123
    2012/2/14 2012/2/14 1124
    2012/2/15 2012/2/15 1125
    2012/2/16 2012/2/16 1126
    2012/2/17 2012/2/17 1127
    2012/2/18 2012/2/18 1128
    2012/2/19 2012/2/19 1129
    2012/2/20 2012/2/20 1130
    时间问题我已设置了,如果时间不为空的话,那么就取时间段内的订单.如果单号不为空的话,那么把所选的时间清空,然后单独查询这个单号
    select * from tb1
    where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '%'  
    结果为
    2012/2/5 2012/2/10 1115
    2012/2/5 2012/2/10 1116
    2012/2/5 2012/2/10 1117
    2012/2/5 2012/2/10 1118
    2012/2/5 2012/2/10 1119
    2012/2/5 2012/2/10 1120select * from tb1
    where 订单日期 between '' and '' or 单号 like '%119' 
    则结果为
    2012/2/5 2012/2/10 1119
      

  4.   

    select * from tb1
      where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '%' 这个语句的问题我是这么理解的(个人意见) or 的优先级别大于WHERE 所以 两个条件一个对了where 就成立。 在两个条件都成立的时候查询优化器可能选择一个最优的计划。LIKE '%' 相当于没有条件不用判断 他就自动执行WHERE 了,应该是优化器图省事的原理吧。
      

  5.   

    完美的代码应该是这样的select * from tb1
      where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '' select * from tb1
      where 订单日期 between '' and '' or 单号 like '%119' 
    把两句代码合起来.时间在订单是在控件中选择的.已经做了相应的设置.
    时间或订单的值只能取其中之一,不能两者兼容. 有时间值的话,订单值必为空,有订单值的话,时间值必为空.
      

  6.   

    您的TAB中明明是“开始日期”和“结束日期”,为什么
    select * from tb1
      where 订单日期 between '2012-02-05' and '2012-02-05' or 单号 like '%'
    新出来一个“订单日期”?是否这里错了?
       您是否是这个意思
    where (开始日期>='2012-02-05' and 结束日期<='2012-02-05' ) or (单号 like '%%')