Consulta de rango de tiempo en mybatis

una base de datos oracle

El tipo de hora de la base de datos es DATE
Insertar descripción de la imagen aquí
TO_CHAR Convierte la fecha o el número en una cadena
TO_DATE Convierte la cadena al tipo de fecha en la base de datos TO_DATE(char, 'format')
TO_NUMBER Convierte la cadena en un número TO_NUMBER(char, 'format')

1. El parámetro de entrada son datos de tipo Cadena.

Insertar descripción de la imagen aquí

rango de tiempo de procesamiento de mybatis

Utilice la función TO_DATE para convertir la hora del tipo Cadena al formato de hora aaaa-MM-dd.
Habrá problemas con las consultas de rango de tiempo de esta manera. El signo = no será válido en este momento, porque VOUCHER_TIME es específico para horas, minutos y segundos, y TO_DATE(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd' ) se pierde cuando se convierte en tiempo. Las horas, minutos y segundos hacen que el juicio == no sea válido. Finalmente se pierden los datos equivalentes.

  <if test="jyzbLedger.voucherTimeTo != null and jyzbLedger.voucherTimeTo != ''">
     and VOUCHER_TIME <![CDATA[>= ]]> TO_DATE(#{jyzbLedger.voucherTimeTo},'yyyy-MM-dd')
   </if>
   <if test="jyzbLedger.voucherTimeFrom != null and jyzbLedger.voucherTimeFrom != ''">
      and VOUCHER_TIME <![CDATA[<= ]]> TO_DATE(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd')
   </if>

forma correcta de escribir
Primero intente TO_CHAR para convertir la fecha en una cadena de formato aaaa-MM-dd y luego use TO_DATE para convertirla en una fecha.

  <if test="jyzbLedger.voucherTimeTo != null and jyzbLedger.voucherTimeTo != ''">
     and TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) <![CDATA[>= ]]> TO_DATE(#{jyzbLedger.voucherTimeTo},'yyyy-MM-dd')
   </if>
   <if test="jyzbLedger.voucherTimeFrom != null and jyzbLedger.voucherTimeFrom != ''">
      and TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) <![CDATA[<= ]]> TO_DATE(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd')
   </if>
Consulta de rango horario en MybatisPlus
 queryWrapper
   .apply(ObjectUtils.isNotEmpty(jyzbLedger.getVoucherTimeTo()),
     "TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) >= TO_DATE ({0},'yyyy-MM-dd')", jyzbLedger.getVoucherTimeTo())
   .apply(ObjectUtils.isNotEmpty(jyzbLedger.getVoucherTimeFrom()),
     "TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) <= TO_DATE ({0},'yyyy-MM-dd')", jyzbLedger.getVoucherTimeFrom());

TO_DATE( TO_CHAR( VOUCHER_TIME, 'aaaa-MM-dd' ), 'aaaa-MM-dd' )

2. El parámetro de entrada son datos de hora del tipo Fecha.

Date类型Para recibir parámetros, debe corregir el formato de transferencia de parámetros con la interfaz yyyy-MM-ddy luego usarlo @DateTimeFormat格式化. Si no usa @DateTimeFormat y luego usa el tipo Fecha para recibir parámetros, se informará un error .

Insertar descripción de la imagen aquí

rango de tiempo de procesamiento de mybatis

TO_CHAR Convertir fecha o número a cadena

Utilice la función TO_CHAR para convertir el formato de fecha de entrada en una cadena de formato especificada y convertir los parámetros de consulta en una cadena de formato especificada.

<!-- voucherTimeTo为Date类型时不能用 jyzbLedger.voucherTimeTo != '' 判空会报错的          -->
 <if test="jyzbLedger.voucherTimeTo != null ">
     and to_char(VOUCHER_TIME,'yyyy-MM-dd') <![CDATA[>= ]]> to_char(#{jyzbLedger.voucherTimeTo},'yyyy-MM-dd')
 </if>
 <if test="jyzbLedger.voucherTimeFrom != null ">
      and to_char(VOUCHER_TIME,'yyyy-MM-dd') <![CDATA[<= ]]> to_char(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd')
 </if>
Consulta de rango horario en MybatisPlus

Consulte lo anterior

Dos bases de datos mysql

El tipo de hora de la base de datos es FECHA
Insertar descripción de la imagen aquí

2. El parámetro de entrada son datos de hora del tipo Fecha.

  1. Entrando
achievementDateStart: 2023-04-26
achievementDateStartEnd: 2023-05-19
  1. Recibir tipo de parámetro
    /**
     * 业绩时间-开始
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "业绩时间-开始")
    private Date achievementDateStart;

    /**
     * 业绩时间-结束
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "业绩时间-结束")
    private Date achievementDateStartEnd;

rango de tiempo de procesamiento de mybatis

date_format formatea los parámetros de tipo de fecha en el tipo de hora especificado

   <if test="oppConditionVO.achievementDateStart != null and oppConditionVO.achievementDateStartEnd != null">
     and date_format( achievement_date, '%Y-%m-%d' )
      BETWEEN date_format( #{oppConditionVO.achievementDateStart}, '%Y-%m-%d' ) 
      and date_format( #{oppConditionVO.achievementDateStartEnd}, '%Y-%m-%d' )
  </if>
Consulta de rango horario en MybatisPlus
  queryWrapper.apply(oppConditionVO.getAchievementDateStart() != null,
                        "date_format (achievement_date,'%Y-%m-%d') >= date_format ({0},'%Y-%m-%d')", oppConditionVO.getAchievementDateStart())
                .apply(oppConditionVO.getAchievementDateStartEnd() != null,
                        "date_format (achievement_date,'%Y-%m-%d') <= date_format ({0},'%Y-%m-%d')", oppConditionVO.getAchievementDateStartEnd());

Consulta de rango de tiempo de Mybatis-Plus

Supongo que te gusta

Origin blog.csdn.net/weixin_43811057/article/details/130388943
Recomendado
Clasificación