sqlserver

select a.*,b.cinvname,c.materialnum,d.department from 

(select clfa,ioflag,cinvcode,batchno,opdate,opuser,case when ioflag=1 then storeinnum else 0-storeinnum end as num  from pro_inoutstores where ioflag<>0) a 

left join (select cinvcode,cinvname from [ITSV ].[UFDATA_102_2017].dbo.inventory) b on a.cinvcode=b.cinvcode 

left join pro_ordercards c on c.cinvcode=b.cinvcode 

left join pro_ordercard d on c.ordercardno=d.ordercardno

where 1=1 

${if(len(department)==0,"","and department=('"+department+"')")}

${if(len(opdate)==0,"","and LEFT(opdate, 7)=('"+opdate+"')")}

order by opdate

 其中${if(len(opdate)==0,"","and LEFT(opdate, 7)=('"+opdate+"')")}不起作用

SQL yzm209396 发布于 2024-6-25 14:28
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
CovidLv3高级互助
发布于2024-6-25 14:30(编辑于 2024-6-25 14:39)

字段opdate 是什么格式?参数opdate又是什么格式?

------

${if(len(opdate)==0,"","and LEFT(opdate, 7)=('"+left(opdate,7)+"')")}

-------

image.png

  • yzm209396 yzm209396(提问者) 时间 2023-01-01
    2024-06-25 14:31 
  • Covid Covid 回复 yzm209396(提问者) 改在上面了。如果两个参数都只是单选的话,就只改上面的
    2024-06-25 14:34 
  • yzm209396 yzm209396(提问者) 回复 Covid 还是不行 opdate为2024-03-01 参数opdate是2024-03
    2024-06-25 14:38 
  • Covid Covid 回复 yzm209396(提问者) 你把日志级别改成debug后,再预览。预览后去日志把带参后的SQL贴出来看看
    2024-06-25 14:40 
最佳回答
0
华莉星宸Lv7资深互助
发布于2024-6-25 14:30

你是用用in?

${if(len(opdate)==0,"","and LEFT(opdate, 7) in ('"+opdate+"')")}

  • yzm209396 yzm209396(提问者) 试了 不行
    2024-06-25 14:32 
  • 华莉星宸 华莉星宸 回复 yzm209396(提问者) 你的参数和字段的格式不匹配吧
    2024-06-25 14:33 
  • yzm209396 yzm209396(提问者) 回复 华莉星宸 都是时间啊
    2024-06-25 14:38 
  • 华莉星宸 华莉星宸 回复 yzm209396(提问者) 字段如果是时间类型,不能用LEFT处理,要转换成字符串,参数也变成字符串
    2024-06-25 14:39 
  • 华莉星宸 华莉星宸 回复 yzm209396(提问者) 改成这样试试,opdate传字符串 ${if(len(opdate)==0,"","and LEFT(CONVERT(varchar(100), opdate, 120), 7) = '"+opdate+"'")}
    2024-06-25 14:43 
  • 2关注人数
  • 139浏览人数
  • 最后回答于:2024-6-25 14:39
    请选择关闭问题的原因
    确定 取消
    返回顶部