语句
这个语句给解释一下,越详细越好,不懂,特别是where后面的if语句,为什么要这么写,没见过
FineBI 用户t9255083 发布于 2020-4-22 10:46
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
JackloveLv7高级互助
发布于2020-4-22 10:48

语句呢

最佳回答
0
ycswyw1123Lv6初级互助
发布于2020-4-22 10:54(编辑于 2020-4-22 11:00)

例如:where 1=1 ${if(len(buid)=0,"","and a.公司编码 in ('"+buid+"')")}

加了${}中间可以使用帆软内置的公式函数,外面一层:if(条件,A,B)表示如果条件成立就取A,否则取B,len(buid)=0,是判断当前参数buid是否为空(无值),如果为空,整个语句就剩下 where 1=1,如果不为空,就是 where 1=1 and a.公司编码 in ('"+buid+"')


总结就是根据参数是否有值去拼接sql语句

最佳回答
0
willgood1986Lv2初级互助
发布于2020-4-22 13:45

${if(condition, result_if_true, result_if_false)}

这个本质是一个动态参数构造过程。

首先说参数,在FR里面,定义一个参数的语法是 ${p},这个是非字符串形式的,否则就需要 ‘${p}’,其中 p 就是参数名称。

下面再说动态参数。

所谓动态参数就是参数是可用可不用的,如果前端没有选择这个参数,那么就不用参数过滤,否则就进行参数过滤,这里的参数过滤使用的 动态SQL拼接的方式实现的。

下面看这个动态的过程是如何实现的。

if(len(p) = 0, " ", " and name like '%" + p + "%'")

这个就是一个if函数执行过程。

len(p) = 0 代表参数内容为空,那么就不过滤,即通过一个空的字符串, “ ”来实现。

否则 就拼接 " and name like '%" + p + "%'",这里默认是一个字符型参数,而且模糊匹配,算是相对复杂的了,其实质就是 and name like '%p%'.由于动态参数自带了 and,所以,一般都是这样写的

SELECT * FROM Table where 1=1 if(len(p) = 0, " ", " and name like '%" + p + "%'")

在前端把这个名为 P 的参数添加即可。

希望你能明白,这个只是一个语法,习惯就好了。

最佳回答
0
唱跳rap全能选手Lv7中级互助
发布于2020-4-22 13:47

这个问题你们也会回答,真厉害

最佳回答
0
kjp123Lv5见习互助
发布于2020-4-22 14:29

这个问题提的有水平

  • 6关注人数
  • 493浏览人数
  • 最后回答于:2020-4-22 14:29
    请选择关闭问题的原因
    确定 取消
    返回顶部