sql拼接${}能否嵌套

如何使用多个${},多重选择,需要嵌套${}

select * from T_ARTICALINPICK_INTF  

where 1=1 

${if(len(barcode)> 0,"and  longbarcode ='"+barcode+"'",

  if((len(fxjid)==0) and (len(brandcode)==0),

       "",

       if(len(fxjid)==0 ,

         "and substr(longbarcode,1,32)='"+brandcode+"'",

         if(len(brandcode)==0,

          "and fxjid='"+fxjid+"'",

          "and substr(longbarcode,1,32)='"+brandcode+"'"+"and fxjid='"+fxjid+"'" )

        )

    )+"and to_char(inserttime,"+"'"+"yyyy-mm-dd hh24:mi:ss"+"')"+" between "+"'"+starttime +"'"+" and"+ "'"+endtime+"'"

  )

}

调不通

FineReport yzm128012 发布于 2023-4-20 10:57 (编辑于 2023-4-20 15:34)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
1592Lv6高级互助
发布于2023-4-20 10:58(编辑于 2023-4-20 15:37)

${if(1=1,if(),if())}

-------------------------------------------

image.png

最佳回答
0
runnerLv7资深互助
发布于2023-4-20 10:58(编辑于 2023-4-20 15:03)

一个${}可以写多个参数

举例

 and 1=1 ${if(all_qx == "1" ,"",

    if( len(jd) == 0 ,"and p.MASS_NO in ('" + ARRAY(replace(user1,",","','")) + "')",

    if(len(user1) == 0 ,"and p.PROJECT_JD in ('" + ARRAY(replace(jd,",","','")) + "')",

    "and p.PROJECT_JD in ('" + ARRAY(replace(jd,",","','")) + "') 

    and p.MASS_NO in ('" + ARRAY(replace(user1,",","','")) + "')" ) ))}

-----------

image.png

 你的参数写法有问题,携程这样的

最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-4-20 11:00

可以嵌套 里面的不需要用${}

例如

SELECT * FROM TABLE WHERE 1=1 ${LEN(参数A)==0,IF(len(参数B)==0,""," and ZD='"+参数B+"'")," and ZD='"+参数A+"'"}

最佳回答
0
CD20160914Lv8专家互助
发布于2023-4-20 15:45

很多问题的,但是你的逻辑有问题,要有一个优先级的判断。比如时间录入了,其它参数没有录入,它走不到这个时间的限制的。反正我只改了你能够看到参数出来的界面,if的判断级判断我不知道你的具体应用 

select * from T_ARTICALINPICK_INTF  

where 1=1 

${if(len(barcode)> 0,"and longbarcode ='"+barcode+"'",

if(len(fxjid)=0 &&len(brandcode)=0, "",       

if(len(fxjid)=0 , "and substr(longbarcode,1,32)='"+brandcode+"'",

if(len(brandcode)=0,"and fxjid='"+fxjid+"'",

if(len(brandcode)>0&&len(fxjid)>0,"and substr(longbarcode,1,32)='"+brandcode+"' and fxjid='"+fxjid+"'" ,

if(len(starttime)>0&&len(endtime)>0,

  "and to_char(inserttime,'yyyy-mm-dd hh24:mi:ss') between '"+starttime +"'"+" and"+ "'"+endtime+"'"

,""))))))}

你多个判断在一起的话。它就会有优先级了!!!,不然就要每一个参数都单独写,而不是像现达样

image.png

  • 4关注人数
  • 331浏览人数
  • 最后回答于:2023-4-20 15:45
    请选择关闭问题的原因
    确定 取消
    返回顶部