设置了参数开始日期和结束日期为什么查询时没有生效,请懂得大神给看一下?

1657274672656.jpgSELECT 

          SUBSTR(a.dbilldate,0,4) nianfen, 

          SUBSTR(a.dbilldate,1,7) yuefen,

          (CASE WHEN substr(substr(A.dbilldate, 1, 10), 9, 2) <= 10 THEN

        '上旬' WHEN 11 <= substr(substr(A.dbilldate, 1, 10), 9, 2) AND

        substr(substr(A.dbilldate, 1, 10), 9, 2) <= 20 THEN '中旬'

         WHEN 21 <= substr(substr(A.dbilldate, 1, 10), 9, 2) AND

        substr(substr(A.dbilldate, 1, 10), 9, 2) <= 31 THEN

          '下旬' ELSE  '0'  END) dingdanriq,  

   

      D.code wljbflbm,

      D.name wlflmc,

      A.nnum  zhusl,

      B.name jldw,

      A.norigtaxmny yuanbijshj,

      A.ntaxmny benbijshj,

      substr(A.dbilldate, 1, 10) riqi

  FROM po_order_b A

  LEFT JOIN bd_measdoc  B

  ON A.cunitid = B.pk_measdoc

  LEFT JOIN bd_material  C

  ON A.pk_srcmaterial =C.pk_material

  LEFT JOIN bd_marbasclass D

  ON C.pk_marbasclass =  D.pk_marbasclass

  LEFT JOIN org_purchaseorg  E

  ON A.pk_org =E.pk_purchaseorg

 

  WHERE   A.dr = '0' AND D.code='040102001001' or D.code='040102001002' or D.code='040101001001' or D.code='040101001002' 

 and 1=1 ${if(len(开始日期)==0,"","and substr(a.dbilldate,1,7) >= '"+开始日期+"'")} 

 ${if(len(结束日期)==0,"","and substr(a.dbilldate,1,7) <= '"+结束日期+"'")} 

 

  order by A.dbilldate  

FineReport 帆软用户ytejrbmiBQ 发布于 2022-7-8 17:26 (编辑于 2022-7-8 18:05)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
uBestMaxLv6见习互助
发布于2022-7-8 19:00

可能不是你日期过滤的问题,在SQL中同时使用and和or,是先执行and,再执行or。不知道你的具体业务逻辑,但是盲猜一下,可能应该需要把or用括号括起来:

WHERE   A.dr = '0' AND (D.code='040102001001' or D.code='040102001002' or D.code='040101001001' or D.code='040101001002' ) 

and 1=1 ${if(len(开始日期)==0,"","and substr(a.dbilldate,1,7) >= '"+开始日期+"'")} 

 ${if(len(结束日期)==0,"","and substr(a.dbilldate,1,7) <= '"+结束日期+"'")} 

最佳回答
1
Z4u3z1Lv6专家互助
发布于2022-7-8 17:29(编辑于 2022-7-8 17:31)

如果是字符串的话 你把dbilldate 以及参数中的“-” 取消掉(replace()掉)

${if(len(开始日期)==0,"","and replace(substr(a.dbilldate,1,7),"-","") >= '"+replace(开始日期,"-","")+"'")} 

 ${if(len(结束日期)==0,"","and replace(substr(a.dbilldate,1,7),"-","") <= '"+replace(结束日期,"-","")+"'")} 

最佳回答
1
CD20160914Lv8专家互助
发布于2022-7-8 17:30

SELECT 

          SUBSTR(a.dbilldate,0,4) nianfen, 

          SUBSTR(a.dbilldate,1,7) yuefen,

          (CASE WHEN substr(substr(A.dbilldate, 1, 10), 9, 2) <= 10 THEN

        '上旬' WHEN 11 <= substr(substr(A.dbilldate, 1, 10), 9, 2) AND

        substr(substr(A.dbilldate, 1, 10), 9, 2) <= 20 THEN '中旬'

         WHEN 21 <= substr(substr(A.dbilldate, 1, 10), 9, 2) AND

        substr(substr(A.dbilldate, 1, 10), 9, 2) <= 31 THEN

          '下旬' ELSE  '0'  END) dingdanriq,  

   

      D.code wljbflbm,

      D.name wlflmc,

      A.nnum  zhusl,

      B.name jldw,

      A.norigtaxmny yuanbijshj,

      A.ntaxmny benbijshj,

      substr(A.dbilldate, 1, 10) riqi

  FROM po_order_b A

  LEFT JOIN bd_measdoc  B

  ON A.cunitid = B.pk_measdoc

  LEFT JOIN bd_material  C

  ON A.pk_srcmaterial =C.pk_material

  LEFT JOIN bd_marbasclass D

  ON C.pk_marbasclass =  D.pk_marbasclass

  LEFT JOIN org_purchaseorg  E

  ON A.pk_org =E.pk_purchaseorg

 

  WHERE   A.dr = '0' AND D.code='040102001001' or D.code='040102001002' or D.code='040101001001' or D.code='040101001002' 

 and 1=1 ${if(len(开始日期)==0,"","and substr(a.dbilldate,1,7) >= '"+left(开始日期,7)+"'")} 

 ${if(len(结束日期)==0,"","and substr(a.dbilldate,1,7) <= '"+left(结束日期,7)+"'")} 

  • 帆软用户ytejrbmiBQ 帆软用户ytejrbmiBQ(提问者) 按照这个语句写上,仍然是没有生效呢,查询结果和我上边发的图片一样,没有按月份过滤出来
    2022-07-08 17:42 
  • CD20160914 CD20160914 回复 帆软用户ytejrbmiBQ(提问者) 你是什么数据库?dbilldate的原始格式是什么类型的?截图看一下它的原始数据
    2022-07-08 17:51 
  • 帆软用户ytejrbmiBQ 帆软用户ytejrbmiBQ(提问者) 回复 CD20160914 oracle数据库,dbilldate的原始格式已上传
    2022-07-08 18:06 
  • CD20160914 CD20160914 回复 帆软用户ytejrbmiBQ(提问者) 你的日期限制到了的。。只是你上面还用了d.code等于4个不同的字符串。。是这一些也满足你的需求。所以就出来你看到的数据了。。改的语法就如楼下一下。
    2022-07-08 20:06 
  • 帆软用户ytejrbmiBQ 帆软用户ytejrbmiBQ(提问者) 回复 CD20160914 非常感谢是这个原因
    2022-07-10 10:23 
  • 3关注人数
  • 386浏览人数
  • 最后回答于:2022-7-8 19:00
    请选择关闭问题的原因
    确定 取消
    返回顶部