Вы можете использовать следующий запрос:
select listagg(letter)
within group (order by UPPER(letter), ASCII(letter) DESC)
from
(
select regexp_substr('gfedcbaGFEDCBA', '.', level) as letter from dual
connect by regexp_substr('gfedcbaGFEDCBA', '.', level) is not null
);
Подзапрос разбивает строку на записи (по одному символу), используя regexp_substr , и внешний запрос объединяет записи в одну строку, используя listagg , после их сортировки.
Здесь вы должны быть осторожны, поскольку сортировка по алфавиту зависит от конфигурации вашей базы данных, как указывал Cine.
В приведенном выше примере буквы сортируются по возрастанию «по алфавиту» и по убыванию по коду ascii, что в моем случае приводит к «aAbBcCdDeEfFgG».
Результат в вашем случае может быть другим.
Вы также можете сортировать буквы, используя nlssort - это позволит вам лучше контролировать порядок сортировки, так как вы будете независимы от конфигурации вашей базы данных.
select listagg(letter)
within group (order by nlssort(letter, 'nls_sort=german')
from
(
select regexp_substr('gfedcbaGFEDCBA', '.', level) as letter from dual
connect by regexp_substr('gfedcbaGFEDCBA', '.', level) is not null
);
Приведенный выше запрос также даст вам «aAbBcCdDeEfFgG», но если вы измените «немецкий» на «испанский», вы получите вместо «AaBbCcDdEeFfGg».