Итак, ваш ENUM - это интерфейс, который база данных не может видеть. Все, что вы можете сделать, это дублировать свою логику в запросе. В Oracle мы можем использовать такие функции, как CASE(), чтобы преобразовать значение столбца в другое значение для сортировки.
SQL> select d2
2 , to_char(d2, 'DY')
3 from t34
4 ORDER BY CASE to_char(d2, 'DY')
5 WHEN 'SAT' THEN 1
6 WHEN 'SUN' THEN 2
7 WHEN 'MON' THEN 3
8 WHEN 'TUE' THEN 4
9 WHEN 'WED' THEN 5
10 WHEN 'THU' THEN 6
11 WHEN 'FRI' THEN 7
12 ELSE 100 END
13/
D2 TO_
--------- ---
25-JUL-10 SUN
24-AUG-10 TUE
13-JUL-10 TUE
26-MAY-10 WED
15-APR-10 THU
25-JUN-10 FRI
6 rows selected.
SQL>
Точные значения даты сокращений будет зависеть от значения параметра NLS_DATE_LANGUAGE. Find out more.
Форматирование даты в Oracle также позволяет нам конвертировать DATE в число в течение дня недели. Это культурная вещь: некоторые общества имеют понедельник как первый день недели, другие воскресенье или субботу. Поэтому TO_CHAR (some_date, 'D') вернет 1 для даты, которая является понедельником в Европе, но 2 в США. Это контролируется настройками NLS_TERRITORY. Find out more.
Если ваша территория установлена таким образом, что TO_CHAR (date_col, «D») возвращает 1 для даты, которая является субботой заказ по п гораздо проще:
SQL> select * from nls_session_parameters
2 where parameter = 'NLS_TERRITORY'
3/
PARAMETER VALUE
------------------------------ -----------------
NLS_TERRITORY UNITED KINGDOM
SQL> select d2
2 , to_char(d2, 'DY')
3 , to_char(d2, 'D')
4 from t34
5 ORDER BY to_char(d2, 'D')
6/
D2 TO_ T
--------- --- -
13-JUL-10 TUE 2
24-AUG-10 TUE 2
26-MAY-10 WED 3
15-APR-10 THU 4
25-JUN-10 FRI 5
25-JUL-10 SUN 7
6 rows selected.
SQL>
Если изменить NLS_TERRITORY результат установленный порядок изменяется соответственно:
SQL> alter session set nls_territory='MOROCCO'
2/
Session altered.
SQL> select d2
2 , to_char(d2, 'DY')
3 , to_char(d2, 'D')
4 from t34
5 ORDER BY to_char(d2, 'D')
6/
D2 TO_ T
-------- --- -
25-07-10 SUN 2
24-08-10 TUE 4
13-07-10 TUE 4
26-05-10 WED 5
15-04-10 THU 6
25-06-10 FRI 7
6 rows selected.
SQL>
На самом деле я не понимаю ваш код ... вы можете объяснить, как выполнить оракул SQL – sikas
Возвращаемое значение to_char (..., 'D') может зависеть от настроек NLS (некоторые начинают воскресенье, некоторые в понедельник). –