[oracle] странное поведение ORDER BY

kill-still


SELECT x
FROM (SELECT 't11' x FROM dual UNION ALL
SELECT 't13' FROM dual UNION ALL
SELECT 'Msk' FROM dual UNION ALL
SELECT 't15' FROM dual UNION ALL
SELECT 'Far' FROM dual UNION ALL
SELECT 'Ural' FROM dual UNION ALL
SELECT 't18' FROM dual) t
ORDER BY x;
и оракл, и мускуль выдают одно и то же:


























x

Far

Msk

t11

t13

t15

t18

Ural


А вот в конкатенации различия:
Мускуль:

SELECT GROUP_CONCAT(x ORDER BY x SEPARATOR ' ')
FROM (SELECT 't11' x FROM dual UNION ALL
SELECT 't13' FROM dual UNION ALL
SELECT 'Msk' FROM dual UNION ALL
SELECT 't15' FROM dual UNION ALL
SELECT 'Far' FROM dual UNION ALL
SELECT 'Ural' FROM dual UNION ALL
SELECT 't18' FROM dual) t;
Far Msk t11 t13 t15 t18 Ural
Оракл:

SELECT LISTAGG(x, ' ') WITHIN GROUP(ORDER BY x)
FROM (SELECT 't11' x FROM dual UNION ALL
SELECT 't13' FROM dual UNION ALL
SELECT 'Msk' FROM dual UNION ALL
SELECT 't15' FROM dual UNION ALL
SELECT 'Far' FROM dual UNION ALL
SELECT 'Ural' FROM dual UNION ALL
SELECT 't18' FROM dual) t;
Far Msk Ural t11 t13 t15 t18

kill-still

Может кто знает, из-за чего это и как с этим бороться?

Dasar

в первом случае сортировка идет без учета регистра
во втором - с учетом регистра.
>> Может кто знает, из-за чего это и как с этим бороться?
найти как явно указать при сортировке обработку регистра символов

Aggressiv

ORDER BY lower(x)?

uncle17

* только убедиться, что в конкретной СУБД lower(x) правильно работает с юникодом

kill-still

Спасибо за вредные советы, уже разобрались: http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch5lin...
Оставить комментарий
Имя или ник:
Комментарий: