una base de datos oracle
El tipo de hora de la base de datos es DATE
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.
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-dd
y luego usarlo @DateTimeFormat格式化
. Si no usa @DateTimeFormat y luego usa el tipo Fecha para recibir parámetros, se informará un error .
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
2. El parámetro de entrada son datos de hora del tipo Fecha.
- Entrando
achievementDateStart: 2023-04-26
achievementDateStartEnd: 2023-05-19
- 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());