2003-07-27 20:00:43 +02:00
|
|
|
SQL Language Extension: ORDER BY clause can specify expressions and nulls placement
|
|
|
|
|
|
|
|
Syntax
|
|
|
|
========
|
|
|
|
|
|
|
|
SELECT ... FROM .... ORDER BY order_list ....;
|
|
|
|
|
|
|
|
order_list : order_item [, order_list];
|
|
|
|
|
|
|
|
order_item : <expression> [order_direction] [nulls_placement]
|
|
|
|
|
|
|
|
order_direction : ASC | DESC;
|
|
|
|
|
|
|
|
nulls_placement : NULLS FIRST | NULLS LAST;
|
|
|
|
|
|
|
|
The ORDER BY clause lets you specify any valid expressions to
|
|
|
|
sort query results. If expression is consisted of a single number
|
|
|
|
it is interpreted as column number. The nulls_placement clause
|
|
|
|
controls ordering of nulls in result set. They can be sorted
|
|
|
|
either above (NULLS FIRST) or below (NULLS LAST) of all other values.
|
|
|
|
Behaviour when nulls_placement is unspecified is NULLS LAST.
|
|
|
|
|
|
|
|
Author:
|
|
|
|
Nickolay Samofatov <skidder@bssys.com>
|
|
|
|
|
|
|
|
|
|
|
|
N O T E S
|
|
|
|
=========
|
|
|
|
|
|
|
|
- Index is never used for ordering if you specify NULLS FIRST
|
|
|
|
as a nulls_placement
|
|
|
|
- Results are undefined if you ask engine to sort results using
|
|
|
|
non-deterministic UDF or stored procedure.
|
|
|
|
- Amount of procedure invocations is undefined if you ask engine to
|
|
|
|
sort results using UDF or stored procedure in any case even
|
|
|
|
if you reference column calling procedure by number
|
|
|
|
- You can use only numbers to reference columns to sort unions
|
|
|
|
|
|
|
|
Examples
|
|
|
|
========
|
|
|
|
|
|
|
|
|
|
|
|
A)
|
|
|
|
SELECT * FROM MSG
|
|
|
|
ORDER BY PROCESS_TIME DESC NULLS FIRST
|
|
|
|
|
|
|
|
B)
|
|
|
|
SELECT FIRST 10 * FROM DOCUMENT
|
2003-07-28 11:21:08 +02:00
|
|
|
ORDER BY STRLEN(DESCRIPTION) DESC
|
2003-07-27 20:00:43 +02:00
|
|
|
|
|
|
|
C)
|
|
|
|
SELECT DOC_NUMBER, DOC_DATE FROM PAYORDER
|
|
|
|
UNION ALL
|
|
|
|
SELECT DOC_NUMBER, DOC_DATA FROM BUDGORDER
|
|
|
|
ORDER BY 2 DESC NULLS LAST, 1 ASC NULLS FIRST
|
|
|
|
|