FR sql问题

SELECT strftime('%Y',订购日期) as 年,strftime('%Y-%m',订购日期) as 年月 ,count(订单ID),COUNT( CASE WHEN 是否已付='true' THEN 订单ID ELSE NULL END) as yfdd,sum(应付金额) FROM 订单 where 1=1 ${if(len(a)=0,'',"and strftime('%Y',订购日期) in ('"+a+"')")}  group by 年月


下面子语句意思

${if(len(a)=0,'',"and strftime('%Y',订购日期) in ('"+a+"')")} 

为什么不不这样写

${if(len(a)=0,'',"and  ('"+a+"') in strftime('%Y',订购日期)")} 

但是按照下面这样写测试会出错。

我理解的意思:当参数为空就选择全部,不为空执行  strftime('%Y',订购日期) in ('"+a+"')")} 这个语句, strftime('%Y',订购日期) 这个执行出来就是类似,2019,2017这种格式的日期,in后面就解释不清楚,正常in前后对调才对,不够测试时错误的。

但是根据in的语法也说不通。具体是什么个意思,求解释。

FineReport huxsh1 发布于 2020-4-21 11:45
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
snrtuemcLv8专家互助
发布于2020-4-21 11:48(编辑于 2020-4-21 12:00)

改成""号,   strftime('%Y',订购日期) in (参数) 是标准sql语句,strftime('%Y',订购日期)是将日期取年份,意思是年份在参数时间内

123.png

最佳回答
0
Wq0706Lv4见习互助
发布于2020-4-21 11:52(编辑于 2020-4-21 11:59)
${if(len(a)=0,'',"and strftime('%Y',订购日期) in ('"+a+"')")}

参数为空,不执行任何操作;

参数不为空,执行判断条件,求a在

strftime('%Y',订购日期)

中的数据



控件a是复选框,要进行以下修改

image.png

  • 2关注人数
  • 618浏览人数
  • 最后回答于:2020-4-21 12:00
    请选择关闭问题的原因
    确定 取消
    返回顶部