Тим Бигелейзен дал решение о том, как можно решить проблему.Но чтобы ответить на вопрос, который вы задали:
что не так с последними тремя записями?
ORDER BY
в столбце CHAR
/ VARCHAR2
будет сортировать покод символа последовательных символов.
SQL Fiddle
Запрос 1 :
SELECT firstname,
ASCII( firstname ),
DUMP( firstname )
FROM loginuser
Результаты :
| FIRSTNAME | ASCII(FIRSTNAME) | DUMP(FIRSTNAME) |
|-----------|------------------|------------------------------------------|
| Ying | 89 | Typ=1 Len=4: 89,105,110,103 |
| Yogen | 89 | Typ=1 Len=5: 89,111,103,101,110 |
| Yvet | 89 | Typ=1 Len=4: 89,118,101,116 |
| alo | 97 | Typ=1 Len=3: 97,108,111 |
| pal | 112 | Typ=1 Len=3: 112,97,108 |
| Ângelo | 50050 | Typ=1 Len=7: 195,130,110,103,101,108,111 |
Из столбца ASCII
видно, что Y
имеет код символа 89, a
равен 97
, p
равен 112 и Â
равен2-байтовый символ Unicode 50050 (или байты 195 и 130), и они отсортированы в порядке возрастания номеров кодов символов.
Другим решением является использование CONVERT
и UPPER
или LOWER
:
Запрос 2 :
SELECT firstname,
UPPER( CONVERT( firstname, 'US7ASCII' ) )
FROM loginuser
ORDER BY UPPER( CONVERT( firstname, 'US7ASCII' ) )
Результаты :
| FIRSTNAME | UPPER(CONVERT(FIRSTNAME,'US7ASCII')) |
|-----------|--------------------------------------|
| alo | ALO |
| Ângelo | ANGELO |
| pal | PAL |
| Ying | YING |
| Yogen | YOGEN |
| Yvet | YVET |