SQL中有两组时间,请问如何传参将两组时间做成可选

请问各位大佬,我想将这两组时间都做成可选,当用户选择计划下线时间查询时,就不用选择那组创建时间,当选择创建时间查询的时候,就不用选择那组计划下线时间。下面是我的SQL,请问如何传参,请大佬写详细一点。

image.png

image.png

 select p.FACTORYNAME,p.ORGCODE,p.PRODUCTREQUESTTYPE,p.PRODUCTREQUESTNAME,p.PRODUCTSPECNAME,p.PLANQUANTITY,

p.RELEASEDQUANTITY,p.FINISHEDQUANTITY,p.SCRAPPEDQUANTITY,p.BONUSQUANTITY,

to_CHAR(p.PLANRELEASEDTIME,'YYYY/MM/DD')PLANRELEASEDTIME,

to_CHAR(p.PLANFINISHEDTIME,'YYYY/MM/DD')PLANFINISHEDTIME,

to_CHAR(p.CREATETIME,'YYYY/MM/DD')CREATETIME,

to_CHAR(p.RELEASETIME,'YYYY/MM/DD')RELEASETIME,

p.COMPLETETIME,p.PRODUCTREQUESTSTATE

 from MES_PRODUCTREQUEST p ,MES_PRODUCTREQUEST t 

 WHERE to_CHAR(p.PLANRELEASEDTIME,'YYYY-MM-DD') BETWEEN '${计划下线开始时间}' AND '${计划下线结束时间}'

 AND to_CHAR(t.CREATETIME,'YYYY-MM-DD') BETWEEN '${创建开始时间}' AND '${创建结束时间}'

 and p.PRODUCTREQUESTNAME=t.PRODUCTREQUESTNAME

 and p.FACTORYNAME=t.FACTORYNAME 

FineReport 用户G8480957 发布于 2021-10-11 18:49 (编辑于 2021-10-11 19:27)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Moki_minLv5初级互助
发布于2021-10-11 18:57

${if(len(开始时间) == 0,"","and 日期 >= to_date('" + 开始时间+"','yyyy-mm-dd')")}

${if(len(结束时间) == 0,"","and 日期 <= to_date('" + 结束时间+"','yyyy-mm-dd')")}

你可以把它们都写成开放式的,这样选谁都可以

  • 用户G8480957 用户G8480957(提问者) 我有疑问:1、那我控件需要删除一组是不是? 2、你写的日期是不是我SQL中日期的字段(CREATETIME)
    2021-10-11 19:03 
  • Moki_min Moki_min 回复 用户G8480957(提问者) ${if(len(创建开始时间) == 0,\"\",\"and t.CREATETIME >= to_date(\'\" + 创建开始时间+\"\',\'yyyy-mm-dd\')\")} ${if(len(创建结束时间) == 0,\"\",\"and t.CREATETIME <= to_date(\'\" + 创建结束时间+\"\',\'yyyy-mm-dd\')\")} 举了创建时间为例子,p.PLANRELEASEDTIME同理
    2021-10-11 19:08 
  • 用户G8480957 用户G8480957(提问者) 回复 Moki_min 你好,我SQL传参如下,有一个问题,我创建时间输入2021-10-8至2021-10-9号,捞出的创建时间那列数据还有2015年的呢,怎么回事呢 WHERE 1=1 ${if(len(创建开始时间) == 0,\\\"\\\",\\\"and t.CREATETIME = to_CHAR(\\\'\\\" + 创建开始时间+\\\"\\\',\\\'yyyy-mm-dd\\\')\\\")} ${if(len(创建结束时间) == 0,\\\"\\\",\\\"and t.CREATETIME <= to_CHAR(\\\'\\\" + 创建结束时间+\\\"\\\',\\\'yyyy-mm-dd\\\')\\\")} AND 1=1 ${if(len(计划下线开始时间) == 0,\\\"\\\",\\\"and p.PLANRELEASEDTIME = to_CHAR(\\\'\\\" + 计划下线开始时间+\\\"\\\',\\\'yyyy-mm-dd\\\')\\\")} ${if(len(计划下线结束时间) == 0,\\\"\\\",\\\"and p.PLANRELEASEDTIME <= to_CHAR(\\\'\\\" + 计划下线结束时间+\\\"\\\',\\\'yyyy-mm-dd\\\')\\\")}
    2021-10-11 19:41 
  • Moki_min Moki_min 回复 用户G8480957(提问者) >=,你两段都少了个>
    2021-10-11 20:05 
最佳回答
0
尛鬼Lv5中级互助
发布于2021-10-11 19:02
手机写sql有点慢,用这个格式拼接sql你可以参考一下
  • 用户G8480957 用户G8480957(提问者) 我就是按照这个格式写的,但是两组时间做成可选,where 字段日期 between ‘’ and ‘’,这种我就搞不懂如何传参,求指教
    2021-10-11 19:45 
  • 2关注人数
  • 318浏览人数
  • 最后回答于:2021-10-11 19:27
    请选择关闭问题的原因
    确定 取消
    返回顶部