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 パブリックをフォローする
アカウント