sql问题

SELECT * FROM  表1 where 年份=case when '${月份}' =1 then '${年份}'-1 else '${年份}' end

and 月份=case when '${月份}'  =1 then 12 else '${月份}' -1 end

union all 

SELECT *  FROM  表2 where 年份 ='${年份}'

and 月份 ='${月份}'

数据库中年份和月份都是int类型,表一需要选择上月的记录,表二需要当前月份的记录,这样写报错显示从数据类型 varchar 转换为 numeric 时出错,哪里错了呀?

FineReport 蒙xiao 发布于 2023-11-1 15:48 (编辑于 2023-11-1 15:49)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
snrtuemcLv8专家互助
发布于2023-11-1 15:50(编辑于 2023-11-1 15:57)

试试

SELECT * FROM  表1 where 年份=case when ${月份}=1 then ${年份}-1 else ${年份} end

and 月份=case when ${月份} =1 then 12 else ${月份} -1 end

union all 

SELECT *  FROM  表2 where 年份 =${年份}

and 月份 =${月份}

===================

SELECT * FROM  表1 where 年份=int(case when ${月份}=1 then ${年份}-1 else ${年份} end)

and 月份=int(case when ${月份} =1 then 12 else ${月份} -1 end)

union all 

SELECT *  FROM  表2 where 年份 =int(${年份})

and 月份 =int(${月份})

  • 蒙xiao 蒙xiao(提问者) 还是显示数据类型转换失败
    2023-11-01 15:54 
  • snrtuemc snrtuemc 回复 蒙xiao(提问者) 那试试强制转int,看修改答案
    2023-11-01 15:57 
  • 蒙xiao 蒙xiao(提问者) 回复 snrtuemc 不好意思,我把字段全部写出来就可以了
    2023-11-01 16:09 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-11-1 15:52(编辑于 2023-11-1 15:58)

seleCT * FROM  表1 where 年份=case when ${月份} =1 then ${年份}-1 else ${年份} end

and 月份=case when ${月份}  =1 then 12 else ${月份} -1 end

union all 

SELECT *  FROM  表2 where 年份 =${年份}

and 月份 =${月份}

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

SELECT * FROM 表1 WHERE 年份='${IF(月份=1,年份-1,年份)}' and 月份='${IF(月份=1,12,月份-1)}'

UNION ALL

SELECT *  FROM  表2 where 年份 ='${年份}

and 月份 ='${月份}'

  • 蒙xiao 蒙xiao(提问者) 还是显示数据类型转换失
    2023-11-01 15:55 
  • Z4u3z1 Z4u3z1 回复 蒙xiao(提问者) 试试上面修改 的
    2023-11-01 15:58 
  • 蒙xiao 蒙xiao(提问者) 回复 Z4u3z1 不好意思,我把字段全部写出来就可以了
    2023-11-01 16:09 
  • Z4u3z1 Z4u3z1 回复 蒙xiao(提问者) 字段全部写出来啥意思?
    2023-11-01 16:10 
  • 蒙xiao 蒙xiao(提问者) 回复 Z4u3z1 就是把select*写成具体的字段呢
    2023-11-01 16:18 
最佳回答
0
用户k6280494Lv6资深互助
发布于2023-11-1 15:52

SELECT * FROM  表1 where 1=1

${if(月份=1,"and 年份='"+年份 -1+"'","and 年份='"+年份+"'")}

${if(月份=1,"and 月份=12","and 月份='"+月份+"'")}

union all 

SELECT *  FROM  表2 where 年份 ='${年份}'

and 月份 ='${月份}'

最佳回答
0
杰杰1108Lv6初级互助
发布于2023-11-1 15:57

UNION ALL看下表1和表2的数据类型是否一致

  • 蒙xiao 蒙xiao(提问者) 一模一样
    2023-11-01 15:59 
  • 杰杰1108 杰杰1108 回复 蒙xiao(提问者) 那你就贴你的参数控件内容,贴图出来看看
    2023-11-01 16:08 
  • 蒙xiao 蒙xiao(提问者) 回复 杰杰1108 不好意思,我把字段全部写出来就可以了
    2023-11-01 16:09 
  • 杰杰1108 杰杰1108 回复 蒙xiao(提问者) 那就是因为字段没有一一对应呀,可能某个字符串字段对应到了int字段上了
    2023-11-01 21:02 
最佳回答
0
快乐星光Lv5中级互助
发布于2023-11-1 16:03

先直接用

SELECT * FROM  表1 where 年份=2022

union all 

SELECT *  FROM  表2 where 年份 =2023

试一下,看有没有错误。没有的话看你的参数传入值有没有问题。

image.png

  • 蒙xiao 蒙xiao(提问者) 不好意思,我把字段全部写出来就可以了
    2023-11-01 16:10 
  • 4关注人数
  • 378浏览人数
  • 最后回答于:2023-11-1 16:03
    请选择关闭问题的原因
    确定 取消
    返回顶部