数値の昇順で sql の結果を並べ替える必要があります。私のコードは次のようなものです:
ORDER BY CAST(`baseData` AS DECIMAL(10,2)) {$dir} ";
とてもうまく機能しますが、問題があります。すべての NULL 値が一番下に置かれ、「0」のように見なされると思います。すべての NULL 値を一番下に配置する必要があります。どのように変更できますか?
このSQLを試してください
MYSQL の場合
ORDER BY COALESCE(CAST(`baseData` AS DECIMAL(10,2)),0)
オラクルの場合
ORDER BY NVL(CAST(baseData AS DECIMAL(10,2)),0)
MySQL 5.5.30 スキーマのセットアップ:
create table test(
t varchar(5)
);
insert into test
values('123'),('234'),('222'),(NULL);
クエリ 1 :
select coalesce(cast(t as decimal(10,2)),0)
from test
order by coalesce(cast(t as decimal(10,2)),0);
結果:
| COALESCE(CAST(T AS DECIMAL(10,2)),0) |
----------------------------------------
| 0 |
| 123 |
| 222 |
| 234 |
すべての Null を先頭に置きたい場合
ORDER BY CAST(`baseData` AS DECIMAL(10,2)) NULLS FIRST
すべてのヌルを一番下に置きたい場合
ORDER BY CAST(`baseData` AS DECIMAL(10,2)) NULLS LAST
Null を 0 と見なしたい場合は、Pheonix のようにキャストします。
ORDER BY Nvl(CAST(`baseData` AS DECIMAL(10,2)), 0) -- Oracle, MS SQL
ORDER BY IfNull(CAST(`baseData` AS DECIMAL(10,2)), 0) -- MySQL
Null を最後にしたいが、0 のように表示したい場合
select ...
Nvl(CAST(`baseData` AS DECIMAL(10,2)), 0) -- Oracle, MS SQL
...
order by CAST(`baseData` AS DECIMAL(10,2)) NULLS LAST