0

数値の昇順で sql の結果を並べ替える必要があります。私のコードは次のようなものです:

ORDER BY CAST(`baseData` AS DECIMAL(10,2)) {$dir} ";

とてもうまく機能しますが、問題があります。すべての NULL 値が一番下に置かれ、「0」のように見なされると思います。すべての NULL 値を一番下に配置する必要があります。どのように変更できますか?

4

3 に答える 3

1

このSQLを試してください

MYSQL の場合

ORDER BY COALESCE(CAST(`baseData` AS DECIMAL(10,2)),0)

オラクルの場合

ORDER BY NVL(CAST(baseData AS DECIMAL(10,2)),0)

SQL フィドル

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 |
于 2013-06-02T11:44:18.130 に答える
0

すべての 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
于 2013-06-02T12:00:11.463 に答える