MybatisPlus での MySQL のソート失敗問題の解決策

CRUD エンジニアとして、今日 sql を書いているときに問題がありました.10 進数フィールドに従って並べ替えると、要件に従って並べ替えられません.最初は、mysql の問題だと誤解しました.浮動小数点型に従ってソートされていない 操作は虎のように熾烈で、データは変換されます:
sql は次のとおりです。

	select a_stk_pct_chg1 from land_hk_north_stat  order by 'a_stk_pct_chg1' desc 

誤解

このフィールドが varchar 型であるという誤解。直接ソートすることはできません.
解決策は
、元の設計を変更せずに SQL を変更することです. まず文字列を数値に変換する必要があります.

1. javaの強制変換と同様に、varchar型+0を操作する

order by (a_stk_pct_chg1+0) desc

2. 関数 CAST (型としての値) または CONVERT (値、型) を使用します。

タイプは、DECIMAL (浮動小数点)、SIGNED (整数)、UNSIGNED (符号なし整数) のいずれかです。

order by CAST(a_stk_pct_chg1 as DECIMAL) desc

また

order by CONVERT(a_stk_pct_chg1,DECIMAL) desc

しかし!! ! 上記の方法をすべて使用しましたが、本当に役に立たない. 胸がゾクゾクします. これはバービーQですが、プログラマーの資格があるので、これを放棄することはできません. データを慎重に確認した後、手がかりを見つけましたsql log. を調べたところ、MybatisPlus 変数定義のエスケープに問題があることが判明しました!

最初にxmlでいくつかのSQLに行きましょう

	<if test="params.sortFild != null ">
			ORDER BY  ${params.sortFild} DESC
		</if>

1. #{sortFild} の形式の変数の場合、Mybatis はそれを文字列値として扱います. 変数が正常に置換されると、デフォルトで変数値に引用符が追加されます. 結果は次のとおりです
.

ORDER BY ‘sortFild' DESC

2. ${sortFild} の形式の変数の場合、Mybatis はそれを直接変数として扱います。つまり、変数が正常に置き換えられた後は、再び引用されることはありません。

 ORDER BY  sortFild  DESC

次に、サービスを実行すると、問題は完全に解決されます〜


WeChat パブリックをフォローする
アカウントここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/CharlesYooSky/article/details/126138610