Порядок Oracle по верхнему (colname) не дает правильных результатов для нестроковых столбцов - PullRequest
3 голосов
/ 09 февраля 2011

Когда в oracle db есть нестроковый столбец (например, varchar, date) (col1), если я это сделаю:

select * from table order by col1 asc

заказывает правильно. (то есть для даты, это заказывает от самой старой до самой последней, для числовой, от самой низкой до самой высокой) Но если я сделаю, select * from table order by upper(col1) asc заказ не правильный.

В чем причина такого поведения?

1 Ответ

8 голосов
/ 09 февраля 2011

UPPER берет строку и возвращает строку. Если col1 является чем-то отличным от строки, то перед выполнением функции его нужно будет неявно привести к строке. Поскольку выходные данные функции UPPER представляют собой строку, сортировка должна будет использовать семантику сортировки строк, а не семантику сортировки col1. Если col1 является числовым, например

  • UPPER (9) возвращает строку '9'
  • UPPER (10) возвращает строку '10'

Строка «9» идет в алфавитном порядке после строки «10», что, по-видимому, является проблемой, которую вы видите.

Но если col1 не является строкой, зачем преобразовывать ее в верхний регистр для сортировки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...