SQL中的参数不能将默认值设置为公式

如图,在SQL中设置了一个名为日期的参数,并嵌套在IF函数中使用,当参数默认值设置为日期、字符串等固定值时,能正常使用,但是设置成公式时,会报错,这个问题跟我用的公式无关,像是其他FORMAT函数都报同一个错误,但是换成字符串就能过,即使字符串就是公式的结果

PS,已经简化到就剩个参数了,但是只要参数是公式就不行,报错一直是同一个

捕获.PNG

FineReport yzmwnGne1706131 发布于 2024-2-1 16:41 (编辑于 2024-2-5 12:22)
1min目标场景问卷 立即参与
回答问题
悬赏:23 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
yzmwnGne1706131Lv2见习互助
发布于2024-2-21 15:00

寄了,找了很多方式最后报的是同一个错误,尝试从SQL找问题,简化到只剩一个参数一个where,套用公式仍然报错,怀疑是jar包的问题,但是公司版本10.0不升级我这边也不能更新,没辙了选择用参数面板,然后给参数面板上的控件设置默认值,再设置初始化事件用JS代码隐藏掉参数面板,能用,但是很卡,网页框一跳转先加载个三四分钟,这个问题暂时是通过参数面板绕过去了,下一步等公司啥时候更新版本再试试看,该问题与用的什么公式一点关系都没有,以后如果有人碰到相同的报错,不用尝试公式这方面了,要么参数面板绕过去,要么选择升级版本吧

最佳回答
0
snrtuemcLv8专家互助
发布于2024-2-1 16:42

format(today(),"yyyy/MM/dd")

  • yzmwnGne1706131 yzmwnGne1706131(提问者) 试了,报的是同一个错误
    2024-02-01 16:43 
  • snrtuemc snrtuemc 回复 yzmwnGne1706131(提问者) 看你的数据,改成 yyyy-MM-dd 格式呢
    2024-02-01 16:45 
  • yzmwnGne1706131 yzmwnGne1706131(提问者) 回复 snrtuemc 一样,这个办法之前查到过,换了差不多七八个公式,每个公式里面的格式都挨个试了,报的都是同一个错误,就是图里那个
    2024-02-01 16:46 
  • yzmwnGne1706131 yzmwnGne1706131(提问者) 回复 snrtuemc 应该跟格式无关,这个甚至试过用字符串格式,不报错,但是换成结果一样的公式型,就报错
    2024-02-01 16:49 
  • snrtuemc snrtuemc 回复 yzmwnGne1706131(提问者) 直接可以正常查询日期,然后点sql看看sql语句中,这个是什么格式,在写公式format成这个格式
    2024-02-01 16:50 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2024-2-1 16:42(编辑于 2024-2-1 16:51)

FORMAT(today(),"yyyy/MM/dd")

----------

这个也改成

convert(nvarchar(10),字段名,120)>'2023-01-01'

image.png

---------

image.png

  • yzmwnGne1706131 yzmwnGne1706131(提问者) 试过,很多种公式都试过了,报的同一个错误
    2024-02-01 16:45 
  • Z4u3z1 Z4u3z1 回复 yzmwnGne1706131(提问者) 补充在上面
    2024-02-01 16:47 
  • yzmwnGne1706131 yzmwnGne1706131(提问者) 回复 Z4u3z1 一样,还是报同一个错误
    2024-02-01 16:48 
  • yzmwnGne1706131 yzmwnGne1706131(提问者) 应该跟格式无关,这个甚至试过用字符串格式,不报错,但是换成结果一样的公式型,就报错
    2024-02-01 16:50 
  • Z4u3z1 Z4u3z1 回复 yzmwnGne1706131(提问者) 可以远程瞧瞧么?或者你把日志级别改成debug后再预览,报错后去日志提取完整的SQL
    2024-02-01 16:51 
最佳回答
0
JL98Lv6中级互助
发布于2024-2-1 16:43

today()不是下划线格式的,所以报错

image.png

  • yzmwnGne1706131 yzmwnGne1706131(提问者) 跟这个应该没关系,之前试过各种格式各种公式,都是报同一个错误,甚至是字符串格式的都不报错,换成公式,即使公式结果跟字符串一样,也报错
    2024-02-01 16:49 
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-2-1 16:48

这里是不是少个空格

image.png

  • yzmwnGne1706131 yzmwnGne1706131(提问者) 跟这个没关系,参数即使设置成字符串格式打了个日期上去,都不报错,只有在参数默认值设置为公式时报错
    2024-02-01 16:50 
最佳回答
0
招财进宝Lv3见习互助
发布于2024-2-1 16:52(编辑于 2024-2-1 17:04)

第一步,用now()  看看报出不

第二步,还是那个窗口查看执行sql语句,看看哪个参数进去的是什么东西,再思考修改

第三步,明确的告诉你,你用公式给进去的时间格式是不对的,不能单纯的=,需要你看了第二步后看看再修改,

  • yzmwnGne1706131 yzmwnGne1706131(提问者) 格式这个试过很多种都是报的同一个错误,没辙了才来提问的,这个参数甚至我拿字符串打一个进去都不报错,就是换成公式,哪怕公式结果跟字符串一模一样都不行,类似FORMAT函数都试过了,没用,报错给的像是代码封装问题
    2024-02-01 16:55 
  • 招财进宝 招财进宝 回复 yzmwnGne1706131(提问者) 给我一个远程,或者联系下,把代码发我,我来看如何
    2024-02-01 17:05 
  • 招财进宝 招财进宝 回复 yzmwnGne1706131(提问者) 我就这么跟你说吧,使用排除法,精确定位问题的所在。那个注释掉如果其他没问题。确定了就是那个时间参数那块的问题。接着你需要简化,简单写一个时间参数的,不要带那些函数在里面,就用单纯的 字段等于时间参数的。就用这个来测试。 那么根据目前来看,now() 是完全可以传进去的。 所以你有问题的可能是前面对字段处理的那个函数,是哪个函数,有可能就是判断里面的其他函数,例如convert.这里只给你提供思路,问题真的很好排查和解决。不要把一堆代码放上去自己为难自己。请用最简单的代码进行测试
    2024-02-01 17:30 
  • yzmwnGne1706131 yzmwnGne1706131(提问者) 回复 招财进宝 公司设置的改不了这个,我发下代码SELECT convert(varchar(10),dbo.Alignment.ALI_ENDTIME,120) as 日,convert(varchar(7),dbo.Alignment.ALI_ENDTIME,120) as 月,dbo.CarInfo.VIN,dbo.CarInfo.CAR_MODELID,dbo.Alignment.ALI_ENDTIME,dbo.Alignment.ALI_1TOEINL,dbo.Alignment.ALI_1TOEINR,dbo.Alignment.ALI_2TOEINL,dbo.Alignment.ALI_2TOEINR,dbo.Alignment.ALI_1CAMBERANGLEL,dbo.Alignment.ALI_1CAMBERANGLER,dbo.Alignment.ALI_BOK FROM dbo.Alignment INNER JOIN dbo.CarInfo ON Alignment.VIN = dbo.CarInfo.VIN and (dbo.CarInfo.CAR_MODELID = \'7004EVA4CAM\'or dbo.CarInfo.CAR_MODELID = \'7004EVA4KAK\') and 1=1 ${if(len(日期) == 0,\"\",\"and convert(varchar(10),dbo.Alignment.ALI_ENDTIME,120)= \'\" + 日期 + \"\'\")}and dbo.Alignment.ALI_ENDTIME >\'2023-1-1\' order by dbo.Alignment.ALI_ENDTIME
    2024-02-05 10:07 
  • yzmwnGne1706131 yzmwnGne1706131(提问者) 回复 招财进宝 周末放假没看,代码是这样的
    2024-02-05 10:07 
  • 3关注人数
  • 383浏览人数
  • 最后回答于:2024-2-21 15:00
    请选择关闭问题的原因
    确定 取消
    返回顶部