那个大神可以帮忙看下这个sql吗用了三个参数来筛选,但是查询出的结果没有按照时间区间来筛选

image.png

FineReport 帆软用户u2FKa5vopL 发布于 2023-11-30 15:33
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
CD20160914Lv8专家互助
发布于2023-11-30 15:49

你是oracel,如果你的字段budat在数据库里面就是日期格式,那么就没有必要去截取了。转换成文本后,其实性能还降低了。可以直接这样

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

where 1=1

${if(len(ym_sta)=0,"","and budat>=to_date('"+DATEINMONTH(CONCATENATE(ym_sta,"-01"),1)+"','yyyy-mm-dd')")}

${if(len(ym_end)=0,"","and budat<to_date('"+DATEINMONTH(CONCATENATE(ym_end,"-01"),-1)+"','yyyy-mm-dd')+1")}

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

image.png

还有你是取一整月的数据。为什么又限制它为8天前的数据?

image.png

  • 帆软用户u2FKa5vopL 帆软用户u2FKa5vopL(提问者) 限制八天是业务上的需求,你这个写法没有看懂budat>=to_date(\'\"+DATEINMONTH(CONCATENATE(ym_sta,\"-01\"),1)+\"\',\'yyyy-mm-dd\')\")}这是什么意思呢
    2023-11-30 16:01 
  • CD20160914 CD20160914 回复 帆软用户u2FKa5vopL(提问者) 比如你限制11月,但是你又用系统前8天,那这个怎么取得全11月数据?甚至都可能取不到,假如现在是11-5号,你用当前日期减8天,那么它的开始日期是10-28号了,而你传的参数是取11月的数据,这不是冲突了?我的公式就是你传入11月的时候,取整个11月的数据。因为你是年月格式,所以要拼接起来标准的日期,去获取它的开始日与结束日,最后套用to_date把文本日期,转换成oracel识别的日期,你测试看
    2023-11-30 16:05 
  • 帆软用户u2FKa5vopL 帆软用户u2FKa5vopL(提问者) 还是不行 这再发个贴子吧 你看下是这样改的吗
    2023-11-30 16:25 
  • CD20160914 CD20160914 回复 帆软用户u2FKa5vopL(提问者) 你仔细理解我上面说的话!!看懂了再说。两个条件限制,而且用一个字段去限制不冲突,你理解到我上面说的话没有
    2023-11-30 16:40 
最佳回答
0
luojian0323Lv7资深互助
发布于2023-11-30 15:37(编辑于 2023-11-30 16:02)

你先把参数用常量填充,能不能查出来数据?另外你这个参数传过来的值是日期,还是年月,还是年?image.png

  • 帆软用户u2FKa5vopL 帆软用户u2FKa5vopL(提问者) 数据是可以查出来的,查出来的数据日期是2023-11-30这种的 ,但是参数那个地方我做了格式化了,现在问题就是可以根据基地werks这个参数查询,那个时间参数查询不了
    2023-11-30 15:41 
  • luojian0323 luojian0323 回复 帆软用户u2FKa5vopL(提问者) 你格式化了日期 比如 2023-11-30 被你格式成年月后就是2023-11 你想想要和什么 拼接后再查询,或者要不要把字段截取年月部份再查询呢
    2023-11-30 15:44 
  • luojian0323 luojian0323 回复 帆软用户u2FKa5vopL(提问者) 上面的sql是不是你写的呀? 这部份改成 and BUDAT>= \'${ym_sta}\'||\'-01\' --大于等于开始年月的月初 AND BUDAT<=to_char(last_day(to_date(\'${fym end}\'||\'-01\',\'YYYYMMDD\')),\'YYYY-MM-DD\') --小于等于结束年月的月末 我这个是db2语法
    2023-11-30 16:01 
  • 帆软用户u2FKa5vopL 帆软用户u2FKa5vopL(提问者) 回复 luojian0323 sql不是我写的,让我来修改添加时间区间了 还是不会调我再发一个帮忙看看呗 哥
    2023-11-30 16:27 
最佳回答
0
云朵儿Lv4见习互助
发布于2023-11-30 15:51

你substr函数想获取的是什么数据,可以在select那里看一下这个函数你取到的是什么值

  • 帆软用户u2FKa5vopL 帆软用户u2FKa5vopL(提问者) 获取的日期的前七位2023-11 查询出的数据是2023-11-30这样的形式
    2023-11-30 15:57 
  • 云朵儿 云朵儿 回复 帆软用户u2FKa5vopL(提问者) 这两个和时间有关的参数是从日期控件上获取的吗,获取的返回值类型是日期还是字符串
    2023-11-30 16:42 
  • 4关注人数
  • 238浏览人数
  • 最后回答于:2023-11-30 16:02
    请选择关闭问题的原因
    确定 取消
    返回顶部