порядок, не давая правильный вывод, так как значение ASCII минус (-) больше, чем плюс (+) - PullRequest
0 голосов
/ 18 декабря 2018

почему моя таблица не дает правильного вывода на основе значений ASCII.Я написал запрос наподобие select * from patient1 order by BLOOD_GROUP DESC;, поэтому, согласно моим знаниям, O-ve, O + ve, ... придет в качестве выходных данных, но мой вывод будет в виде O + ve, O-ve, ... enter image description here

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Если +/- всегда находится на второй позиции, вы можете заменить их на символы, упорядоченные по вашему желанию:

select p.*
from patient p
order by replace(replace(blood_group, '+', '1'), '-', '2')

Это не влияет на набор результатов, только на порядок.

0 голосов
/ 18 декабря 2018

Заказ работает правильно.Код ASCII для + равен 43, а код ASCII для - равен 45, поэтому + действительно должен предшествовать - в лексикографическом порядке.

В качестве альтернативного решения вы можете отсортировать по логическому значению true / false, содержит ли blood_group символ -, а затем по самому blood_group, чтобы вы получили A с доваши B s:

SELECT   *
FROM     patient1
ORDER BY blood_group LIKE '%-%' DESC, blood_group
...