以下是一些数据。正如你所看到的名字排序ASCII顺序,这是不完全一样的字母顺序:
SQL> select id, name, somedate
2 from t42
3 order by name, somedate
4/
ID NAME SOMEDATE
---------- ---------- ---------
8 Billington 24-MAR-11
13 Cave 19-MAR-11
4 Clarke 28-MAR-11
919 Feuerstein 13-MAR-11
16 Gasparotto 16-MAR-11
1014 KULASH 18-MAR-11
1 Kestelyn 31-MAR-11
917 Kishore 15-MAR-11
2 Lira 30-MAR-11
6 PADFIELD 26-MAR-11
11 Rigby 21-MAR-11
1007 Robertson 25-MAR-11
12 SCHNEIDER 20-MAR-11
9 SPENCER 23-MAR-11
3 TRICHLER 29-MAR-11
918 VERREYNNE 14-MAR-11
10 boehmer 22-MAR-11
15 hall 17-MAR-11
920 poder 12-MAR-11
5 van wijk 27-MAR-11
1021 11-MAR-11
21 rows selected.
SQL>
排序由upper(name)
使得它不区分大小写:
SQL> select id, name, somedate
2 from t42
3 order by upper(name), somedate
4/
ID NAME SOMEDATE
---------- ---------- ---------
8 Billington 24-MAR-11
10 boehmer 22-MAR-11
13 Cave 19-MAR-11
4 Clarke 28-MAR-11
919 Feuerstein 13-MAR-11
16 Gasparotto 16-MAR-11
15 hall 17-MAR-11
1 Kestelyn 31-MAR-11
917 Kishore 15-MAR-11
1014 KULASH 18-MAR-11
2 Lira 30-MAR-11
6 PADFIELD 26-MAR-11
920 poder 12-MAR-11
11 Rigby 21-MAR-11
1007 Robertson 25-MAR-11
12 SCHNEIDER 20-MAR-11
9 SPENCER 23-MAR-11
3 TRICHLER 29-MAR-11
5 van wijk 27-MAR-11
918 VERREYNNE 14-MAR-11
1021 11-MAR-11
21 rows selected.
SQL>
的CASE()
改变这进一步首先将所有记录分组在所规定的ID范围内,然后将所有其他记录分组。在选定范围的记录只是由日期排序,而其他记录仍然由名称日期排序:
SQL> select id, name, somedate
2 from t42
3 ORDER BY
4 (
5 CASE
6 WHEN id BETWEEN 900 AND 999 THEN '1AAAAA'
7 ELSE '2'
8 || upper(name)
9 END) ASC,
10 somedate DESC
11/
ID NAME SOMEDATE
---------- ---------- ---------
917 Kishore 15-MAR-11
918 VERREYNNE 14-MAR-11
919 Feuerstein 13-MAR-11
920 poder 12-MAR-11
1021 11-MAR-11
8 Billington 24-MAR-11
10 boehmer 22-MAR-11
13 Cave 19-MAR-11
4 Clarke 28-MAR-11
16 Gasparotto 16-MAR-11
15 hall 17-MAR-11
1 Kestelyn 31-MAR-11
1014 KULASH 18-MAR-11
2 Lira 30-MAR-11
6 PADFIELD 26-MAR-11
11 Rigby 21-MAR-11
1007 Robertson 25-MAR-11
12 SCHNEIDER 20-MAR-11
9 SPENCER 23-MAR-11
3 TRICHLER 29-MAR-11
5 van wijk 27-MAR-11
21 rows selected.
SQL>
来源
2011-04-01 16:48:00
APC
错字?:“900与1AAAAA之间”应该是“900与999之间”。 – Ken 2011-04-01 15:35:20
@ Ken:肯定是一个错字;我现在修好了。 – 2011-04-03 07:33:00