Mysql データベースの 2 つの値を比較する際に問題が発生し、最も低い値が表示されます。
たとえば、私はこれを持っています:
value1 = 23.4
value2 = 4.479
私はこれを試しました:
ORDER BY CAST(column AS SIGNED) ASC
しかし、それは機能していません
繰り返しますが、フィールド タイプは VARCHAR です。
私が探している結果は、4.479 ではなく 23.4 である必要があります。
助言がありますか?
簡単に言えば、価格を保存している場合は、列を DECIMAL に変更する必要があります。VARCHAR はアルファベット順になります。MySQLの数値型について読んでください。
ALTER TABLE your_table MODIFY COLUMN price DECIMAL(10,3);
かなりコストのかかる回避策は、並べ替えの前にすべての値を 10 進数にキャストすることです。
SELECT name, price FROM test ORDER BY CAST(price AS DECIMAL(20, 10)) ASC LIMIT 1
DECIMAL 制限が、列内のすべての値を正しくキャストするのに十分であることを確認してください。
DECIMAL に CAST すると機能します。
select * from tablename order by cast(price as decimal);
+--------+-------+
| name | price |
+--------+-------+
| nail | 0.95 |
| glue | 9.23 |
| hammer | 45.12 |
+--------+-------+