mybatisの時間範囲クエリ

オラクルデータベース

データベースの時間型は DATE
ここに画像の説明を挿入します
TO_CHAR です。 日付または数値を文字列に変換します。
TO_DATE 文字列をデータベースの日付型に変換します。 TO_DATE(char, 'format') TO_NUMBER 文字列を数値に変換します。 TO_NUMBER
(char, 'format')

1. 入力パラメータはString型データです。

ここに画像の説明を挿入します

mybatisの処理時間範囲

TO_DATE 関数を使用して、文字列型の時刻を yyyy-MM-dd 形式の時刻に変換します。
このように時間範囲のクエリでは問題が発生します。VOUCHER_TIME は時、分、秒に固有であり、TO_DATE(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd') であるため、この時点では = 記号は無効になります。 )を時間に換算すると失われ、時、分、秒の==判定が無効となります。最終的には同等のデータが失われます

  <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>

正しい書き方
まず、TO_CHAR を使用して日付を yyyy-MM-dd 形式の文字列に変換し、次に TO_DATE を使用して日付に変換します。

  <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>
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, 'yyyy-MM-dd' ), 'yyyy-MM-dd' )

2. 入力パラメータはDate型の時刻データです。

Date类型パラメータを受け取るには、フロントエンドでパラメータの転送形式を固定して使用する必要がありますが、yyyy-MM-dd@DateTimeFormat@DateTimeFormat格式化を使用せずにDate 型を使用してパラメータを受け取ると、エラーが報告されます

ここに画像の説明を挿入します

mybatisの処理時間範囲

TO_CHAR 日付または数値を文字列に変換します

TO_CHAR 関数を使用して、入力日付形式を指定した形式文字列に変換し、クエリ パラメータを指定した形式文字列に変換します。

<!-- 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>
MybatisPlus の時間範囲クエリ

上記を参照してください

2 つの mysql データベース

データベースの時刻タイプは DATE です
ここに画像の説明を挿入します

2. 入力パラメータはDate型の時刻データです。

  1. 入参
achievementDateStart: 2023-04-26
achievementDateStartEnd: 2023-05-19
  1. 受信パラメータの種類
    /**
     * 业绩时间-开始
     */
    @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;

mybatisの処理時間範囲

date_format 日付型パラメータを指定された時刻型にフォーマットします。

   <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>
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());

Mybatis-Plus 時間範囲クエリ

おすすめ

転載: blog.csdn.net/weixin_43811057/article/details/130388943