数据库中有column_01、column_02、...、column_12对应12个月份的12个字段,如何根据月份参数查询更新对应月份字段?

91 阅读2分钟

前言

兄弟们,新年新开始;最近在大家的帮助下学到了不少sql相关的知识,记录一下吧~

需求

  1. 数据库表中有12个字段,根据月份查询其中某个字段;如前端传来的参数为202301,则查询表中column_01这个字段;
  2. 数据库表中有12个字段,根据月份更新其中某个字段;如前端传来的参数为202301,则更新表中column_01这个字段;
  3. 数据库表中有12个字段,根据当前月份更新当前月份对应的字段;如当前月份为1月,则更新表中column_01这个字段;

代码

需求一:

String month = "202201";

service.java:
mapper.getMonthColumn(month().substring(month().length() - 2))


mapper.java:
List<String> getMonthColumn(@Param("month") String month)

mapper.xml:

<select id="getMonthColumn" resultType="java.lang.String">
    select column_${month}  column
    from tableName
</select>

// 这样就可以查出表中列column_01 所有的记录
// 参数month = "202205" ,就可以查出表中列 column_05 所有的记录 

需求二:

String month = "202201";

service.java:
mapper.updateMonthColumn(month().substring(month().length() - 2))


mapper.java:
List<String> updateMonthColumn(@Param("month") String month,@Param("value") String value)

mapper.xml:

<update id="updateMonthColumn" resultType="java.lang.String">
    update tableName
    <trim prefix="set" suffixOverrides=",">
        <if test='month != null'>
            column_${month} = #{value},
        </if>
        update_time = current_timestamp()
    </trim>
</update>

// 这样就可以查出更新列column_01 所有的记录
// 参数month = "202205" ,就可以更新表中列 column_05 所有的记录 

需求三:


service.java:
mapper.updateMonthNowColumn()


mapper.java:
List<String> updateMonthNowColumn(@Param("id") String id,@Param("value") String value)

mapper.xml:

<update id="updateMonthNowColumn" resultType="java.lang.String">
    update tableName
    set
        column_12 = (if(MONTH(now()) = '12',#{value},column_12)),
        column_11 = (if(MONTH(now()) = '11',#{value},column_11)),
        column_10 = (if(MONTH(now()) = '10',#{value},column_10)),
        column_09 = (if(MONTH(now()) = '09',#{value},column_09)),
        column_08 = (if(MONTH(now()) = '08',#{value},column_08)),
        column_07 = (if(MONTH(now()) = '07',#{value},column_07)),
        column_06 = (if(MONTH(now()) = '06',#{value},column_06)),
        column_05 = (if(MONTH(now()) = '05',#{value},column_05)),
        column_04 = (if(MONTH(now()) = '04',#{value},column_04)),
        column_03 = (if(MONTH(now()) = '03',#{value},column_03)),
        column_02 = (if(MONTH(now()) = '02',#{value},column_02)),
        column_01 = (if(MONTH(now()) = '01',#{value},column_01)),
        update_time = current_timestamp()
WHERE id = #{id} and is_deleted = 0
</update>

// 这样就可以查出更新当前月份对应的列column_month 满足相应条件的某条的记录
// 现在是202301,即1月,就会更新对应id的column_01

总结

主要是字符串替换,${}; 使用的时候要严格校验,预防sql注入;

感谢各位的帮助,共勉~