数据集数据库查询的时候到底是如何配合使用参数的

比如以下这句我经常使用但是还是没能搞明白

${if(len(riqi) == 0,""," and a.riqi = '"+riqi+"'")}

如果参数长度为0 那么取空,否则 a.riqi取  riqi这个参数,这样看我明白。

'"+riqi+"'  尤其是是这块  为啥一定外面要放加号和双引号 还有单引号


然后我现在有个sql代码

where m.field0097<'2020-10-01(对应报表筛选条件参数 就想上面的riqi)' and (m.field0199>='2020-10-01' or m.field0199 is null)


如何改进去呢 组合几次都每成功



13101371976 发布于 2020-12-18 16:06
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
shirokoLv6资深互助
发布于2020-12-18 16:08(编辑于 2020-12-18 16:10)

${}内部会计算,计算出结果之后,再和外面的sql语句拼成完整的sql语句,传到sql去执行。


where 1=1

${if(len(riqi)=0,""," AND m.field0097 <'"+riqi+"'")} 

${if(len(riqi)=0,""," AND (m.field0199 >'"+riqi+"' or m.field0199 is null)")} 


  • 13101371976 13101371976(提问者) 为啥len取长度的时候 直接些参数名字,后面拼接的时候 要加号和双引号单引号包装
    2020-12-18 16:11 
  • shiroko shiroko 回复 13101371976(提问者) 双引号是字符串,字符串内部最终是要给sql的,所以字段名什么的就在里面,加号代表字符串连接,单引号在双引号内所以最终传到sql的。你想想自己直接写sql的where条件的时候,右边是不是要写单引号?
    2020-12-18 16:15 
最佳回答
0
指间沙Lv6中级互助
发布于2020-12-18 16:09(编辑于 2020-12-18 16:17)

当riqi控件长度为0也就是为空的时候,就为空,否则就执行and a.riqi=‘日期控件的值’。

select *from aa where 1=1

${if(len(riqi) == 0,""," and a.riqi = '"+riqi+"'")}


以我这个sql为例。例如riqi为空就执行

select *from aa where 1=1


假如riqi的值为2020-12-18就执行

select *from aa where 1=1

a.riqi='2020-12-18'


开始日期结束日期


where 1=1

${if(len(riqi) == 0,"","and m.field0097<='"+riqi+" 23:59:59'")}

${if(len(riqi) == 0,""," and m.field0199>='"+riqi+" 00:00:00'  or m.field0199 is null")}





  • 13101371976 13101371976(提问者) 这个我明白,你看我最后哪个问题 我要怎么改进去呢
    2020-12-18 16:12 
  • 指间沙 指间沙 回复 13101371976(提问者) 你那两个条件是不是矛盾???不为空执行那段,,然后又或者为空???
    2020-12-18 16:16 
  • 指间沙 指间沙 回复 13101371976(提问者) demo再上面看看。
    2020-12-18 16:19 
  • 13101371976 13101371976(提问者) 回复 指间沙 你说的我大概看明白了 我在想想有点晕了 然后 where m.field0097<\'2020-10-01(对应报表筛选条件参数 就想上面的riqi)\' and (m.field0199>=\'2020-10-01\' or m.field0199 is null) field0097 是入职日期 field0199 是离职日期 需求是 查找10月1日份员工在职人数。 sql语句的意思入职日期在10月1日之前,离职日期要在10月1日之后或者日期为空(没离职 就没数据)
    2020-12-18 16:31 
  • 指间沙 指间沙 回复 13101371976(提问者) 你模板发上来吧,直接改了然后你看看。
    2020-12-18 16:34 
  • 3关注人数
  • 392浏览人数
  • 最后回答于:2020-12-18 16:17
    请选择关闭问题的原因
    确定 取消
    返回顶部