Oracle - сортировка поля VARCHAR2 по номеру - я нашел решение, нужно пояснить его - PullRequest
5 голосов
/ 10 февраля 2011

У меня есть столбец VARCHAR2, который я хочу отсортировать численно.99% (или, возможно, даже 100%) времени он будет содержать цифры.Я искал вокруг и нашел это решение .Цитируя источник:

Помните, что наша цель - отсортировать поле supplier_id в порядке возрастания (на основе его числового значения).Чтобы сделать это, попробуйте использовать функцию LPAD.

Например,

выберите * из заказа поставщика по lpad (supplier_id, 10);

Этот SQL дополняет переднюю частьполе supplier_id с пробелами до 10 символов.Теперь ваши результаты должны быть отсортированы по номерам в порядке возрастания.

Я немного поигрался с этим решением, и оно кажется рабочим (пока), но как это работает, кто-нибудь может объяснить?

1 Ответ

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

При сортировке строк / varchar поле всегда ставится слева направо, как если бы вы сортировали обычные слова.

Именно поэтому у вас возникают проблемы при сортировке

1
2
3
10
11
20

, котораябудет отсортирован как

1
10
11
2
20
3

Но теперь, если вы заполните значения слева, у вас будет что-то вроде

001
002
003
010
011
020

, которое будет правильно сортировать

...