关于sql条件${}拼完后未生效的问题

字段:

Z1WEK,RGWEK两个字段是年加周的字符串     例如 202243

p_numberEditor0             数字入参      例如 1

我想在where下拼接下面这段,逻辑RGWEK <=Z1WEK+ 数字月

因为一年52周,所以Z1WEK+ 数字月大于52时年要加1,并显示多出的周

来个大佬帮我看看我写的对不,没生效

     ${if(CONVERT(int,SUBSTRING(Z1WEK, 5, 2)) + '"+p_numberEditor0+"') >52,

    "and RGWEK <= CONVERT(int,SUBSTRING(Z1WEK,1,4)) + 1 + '"+(p_numberEditor0+CONVERT(int,SUBSTRING(Z1WEK, 5, 2))-52)+"'",

    "and RGWEK <= CONVERT(int,Z1WEK) + '"+p_numberEditor0+"'"))}  

FineReport 狂奔的小蜗牛 发布于 2022-12-8 15:28
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
4
yzm339714Lv6中级互助
发布于2022-12-8 15:35(编辑于 2022-12-8 15:53)

你这不能 公式和sql 函数混在一起用呀  建议直接改成 这样把

where 1 =  1 and 

(case when SUBSTRING(Z1WEK,1,4) = SUBSTRING(RGWEK ,1,4) then CONVERT(int,RGWEK) -  CONVERT(int,Z1WEK) else (CONVERT(int,SUBSTRING(RGWEK,1,4)) - CONVERT(int,SUBSTRING(Z1WEK,1,4)))*52 + (CONVERT(int,SUBSTRING(RGWEK, 5, 2)) - CONVERT(int,SUBSTRING(Z1WEK, 5, 2))) end ) < = ${p_numberEditor0}

我看你的意思就是 找这两个字段 相差范围 在数据值以内的数据,对吧。

直接sql 判断 如果两个字段在同一年 就直接减,不在同一年 就 年份相减乘以52 加上周数相减的值,然后把这个值, 跟 参数值对比就好了嘛

  • 狂奔的小蜗牛 狂奔的小蜗牛(提问者) 大佬,我感觉我没看懂,你看你写的是我说的意思不,就是表里每行数据的有Z1WEK,RGWEK两个字段,查询此表时做一个筛选,逻辑是RGWEK <=Z1WEK+ 数字月(入参),如果Z1WEK后两位+数字月小于52,直接写就行了,如果大于52,则RGWEK 小于的是Z1WEK的前四位年+1,Z1WEK的后两位为它的后两位+数字月(入参)在减去52
    2022-12-08 16:00 
  • yzm339714 yzm339714 回复 狂奔的小蜗牛(提问者) 这个 RGWEK <=Z1WEK+ 数字月(入参) 不就是 (RGWEK - Z1WEK) <= 数字月(入参) 这样的话,如果 两个字段年份一样就直接相减, 如果不一样 就是 我中间 else的那一部分 ,然后把 (RGWEK - Z1WEK) 得到的周数 跟 数字月(入参) 对比嘛, 要小于等于的
    2022-12-08 16:13 
  • 狂奔的小蜗牛 狂奔的小蜗牛(提问者) 数字月大于12小于12都适用吗
    2022-12-09 00:33 
  • yzm339714 yzm339714 回复 狂奔的小蜗牛(提问者) 都适用, 大于的话 把后面的小于等于 改成 大于就行
    2022-12-09 08:55 
  • 狂奔的小蜗牛 狂奔的小蜗牛(提问者) 回复 yzm339714 额,那咱们不知道是大于小于啊,不能手动改啊,应该是动态的把
    2022-12-09 15:12 
最佳回答
1
CD20160914Lv8专家互助
发布于2022-12-8 15:33

看得我一脸的不知道要做什么。。。只看到代码。。然后参数是什么,录入了什么。也没有截图。最后要拼成什么。也没有说。。比如你录入   a与B。那么分别要拼成什么。。又比如录入a和b,,又要展示什么也上几个截图吧,不要担心论坛放不下你的大图,论坛虽然偶尔要抽风,但是可以装得下你的大截图

最佳回答
0
RiveryLv5中级互助
发布于2022-12-8 15:49

看不懂

  • 狂奔的小蜗牛 狂奔的小蜗牛(提问者) 简答说就是表有Z1WEK,RGWEK两个字段,类型varchar 值是yyyy年+第几周 这样的6位字符串,然后我select这个表想加一个过滤条件RGWEK<=Z1WEK +一个参数,这个参数是一个数字。这个过滤条件在帆软的sql里怎么写。需要注意的是如果Z1WEK +一个参数查过了一年的周数是不是应该年+1
    2022-12-09 08:55 
最佳回答
0
用户k6280494Lv6资深互助
发布于2022-12-8 15:50(编辑于 2022-12-9 15:54)

select  ${if("case when CONVERT(int,SUBSTRING(CONVERT(char(10),CONVERT(int,'202232') + CONVERT(int,'"+p_numberEditor0+"')), 5, 2)) > 52 then true else false end",if("case when SUBSTRING(CONVERT(char(10),CONVERT(int,'202232') + '"+ p_numberEditor0 +"'), 5, 2)-52 > 9 then true else false end","CONVERT(char(4),CONVERT(int,SUBSTRING('202232',1,4)) + 1) + '0' +CONVERT(char(2),(SUBSTRING(CONVERT(char(10),CONVERT(int,'202232') + '"+ p_numberEditor0 +"'), 5, 2)-52))","CONVERT(char(4),CONVERT(int,SUBSTRING('202232',1,4)) + 1)+CONVERT(char(2),(SUBSTRING(CONVERT(char(10),CONVERT(int,'202232') + '"+ p_numberEditor0 +"'), 5, 2)-52))"),"CONVERT(int,'202232') + '"+p_numberEditor0+"'")}

我只能写成这个样子,现在的问题是判断不了 >52周  和  大于减52是否大于9

with test_A as (

select '202232' test,

       '202230' test1,

       '测试数据' txt

)

select * from test_A

where test1>=(

select 

case when SUBSTRING(CONVERT(char(10),CONVERT(int,test) + ${p_numberEditor0}), 5, 2) < 52 then CONVERT(int,test) + ${p_numberEditor0}

when SUBSTRING(CONVERT(char(10),CONVERT(int,test) + ${p_numberEditor0}), 5, 2)-52 < 10 then CONVERT(char(4),CONVERT(int,SUBSTRING(test,1,4)) + 1) + '0' +CONVERT(char(2),(SUBSTRING(CONVERT(char(10),CONVERT(int,test) + ${p_numberEditor0}), 5, 2)-52))

when SUBSTRING(CONVERT(char(10),CONVERT(int,test) + ${p_numberEditor0}), 5, 2)-52 > 9 then CONVERT(char(4),CONVERT(int,SUBSTRING(test,1,4)) + 1)+CONVERT(char(2),SUBSTRING(CONVERT(char(10),CONVERT(int,test) + ${p_numberEditor0}), 5, 2)-52)

end

from test_A) 

  • 狂奔的小蜗牛 狂奔的小蜗牛(提问者) 大于9是怎么来的。。
    2022-12-09 00:33 
  • 用户k6280494 用户k6280494 回复 狂奔的小蜗牛(提问者) 小于9不用给他拼接一个0嘛,202309?
    2022-12-09 09:35 
  • 狂奔的小蜗牛 狂奔的小蜗牛(提问者) 回复 用户k6280494 昂,对。但是判断不了的话9和52的话也不行啊,哎这玩意太难了
    2022-12-09 15:13 
  • 用户k6280494 用户k6280494 回复 狂奔的小蜗牛(提问者) 看修改后的,拿去测试一下,正不正确
    2022-12-09 15:54 
  • 4关注人数
  • 547浏览人数
  • 最后回答于:2022-12-9 15:54
    请选择关闭问题的原因
    确定 取消
    返回顶部