powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сортировка символов внутри строки
23 сообщений из 23, страница 1 из 1
Сортировка символов внутри строки
    #39745603
const_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Начал изучать pl sql, наткнулся на задачу по сортировке. Почитал темы на форму, но не догоняю, есть ли простой способ сортировки внутри строки? Например, дана произвольная строка, где могут встречаться только английские буквы "abirtj" или только русские "багоплы" или только цифры '94340' (при сортировке цифр 0 идет вначале), необходимо отсортировать символы в строке по алфавиту, а цифры по возрастанию? изначально строка была смешанная, например '93АzHjskfП5848', я разбил её на диапазоны - только цифры, только русские строчные и т.д, а вот как сортировать внутри диапазона не пойму. Заранее спасибо.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39745613
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const_studentесть ли простой способ сортировки внутри строки?Зачем? Здравым людям это не требуется.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39745630
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const_studentя разбил её на диапазоны - только цифры, только русские строчные и т.д,гласные, четные, звонкие, ... разбивай дальше.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39745710
const_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

А если предположить, что я нездравый человек?))
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39745711
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const_studentнездравый человекДля тех, кого в яслях не учили складывать пирамидку из колечек на палочку, в ВУЗах преподают методы сортировки.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39745714
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicЗачем? Здравым людям это не требуется.
Чего только наши преподы не придумают.

Вот только разбивать на диапазоны зачем?

Автору надо почитать про способы сортировки.
Выбрать нужный алгоритм. И реализовать.
"Пызырек" подойдет вполне.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39745797
Als1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Перфекционизм
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746097
const_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Спасибо, почитаю, просто я так понимаю пузырек подойдет, если необходимый порядок сортировки совпадает с порядком кодировки символов.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746287
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
const_studentСпасибо, почитаю, просто я так понимаю пузырек подойдет, если необходимый порядок сортировки совпадает с порядком кодировки символов.
Любому алгоритму сортировки потребуется числовая характеристика по которой можно ранжировать что либо, причем совершенно неважно что, можешь создать свой массив в котором определишь порядок сортировки для каждого символа.

PS: на PL/SQL можно использовать order by
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746381
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorPS: на PL/SQL можно использовать order by
Распихать значение по строкам, отсортировать, а потом собрать ....
Вы батенька извращенец похлеще его преподов.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746382
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const_student если необходимый порядок сортировки совпадает с порядком кодировки символов.
В любом случае необходимый порядок сортировки можно и нужно выразить некой формулой если он не совпадает с алфавитным расположением..
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746415
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select listagg(s) within group (order by s)
  2  from(select substr('93АzHjskfП5848',level,1) s
  3  from dual
  4  connect by level<=length('93АzHjskfП5848'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYS)
--------------------------------------------------------------------------------
345889HfjkszАП

pl/sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> declare
  2      s varchar2(500);
  3      f boolean := true;
  4  begin
  5      s := '93АzHjskfП5848';
  6      while f loop
  7      f := false;
  8          for i in 1..length(s)-1 loop
  9              if substr(s,i,1)>substr(s,i+1,1) then
 10                  s := substr(s,1,i-1)||substr(s,i+1,1)||substr(s,i,1)||substr(s,i+2);
 11                  f := true;
 12              end if;
 13          end loop;
 14      end loop;
 15      dbms_output.put_line(s);
 16  end;
 17  /
345889HfjkszАП

Процедура PL/SQL успешно завершена.

...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746442
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mRdUKEsql
[spoiler ]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select listagg(s) within group (order by s)
  2  from(select substr('93АzHjskfП5848',level,1) s
  3  from dual
  4  connect by level<=length('93АzHjskfП5848'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYS)
--------------------------------------------------------------------------------
345889HfjkszАП



Если нужна сортировка только в рамках групп, то кейсом можно определить тип данных (например, regexp_replace(...,[[:digit:]]), проставить ранги, а затем уже сделать сортировку в ранге.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746454
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не легче ли просто составить словарь, и сортировать согласно порядка в нем.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746642
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183не легче ли просто составить словарьНа сотню-другую тысяч юникод-символов.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39746672
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mRdUKE,

такое впечатление что listagg сортирует "by binary"

.....
stax
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39747496
const_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKE,

Большое спасибо!
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39747512
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxтакое впечатление что listagg сортирует "by binary"
stax

Посему NLSSORT тебе в руки:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
SQL> select listagg(s) within group (order by s)
  2    from(select substr('CBAcba',level,1) s
  3    from dual
  4    connect by level<=length('CBAcba'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYS)
-----------------------------------------------------------
ABCabc

SQL> select listagg(s) within group (order by nlssort(s))
  2    from(select substr('CBAcba',level,1) s
  3    from dual
  4    connect by level<=length('CBAcba'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYNLSSORT(S))
-----------------------------------------------------------
ABCabc

SQL> alter session set nls_comp=linguistic
  2  /

Session altered.

SQL> alter session set nls_sort=latin_ci
  2  /

Session altered.

SQL> select listagg(s) within group (order by s)
  2    from(select substr('CBAcba',level,1) s
  3    from dual
  4    connect by level<=length('CBAcba'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYS)
-----------------------------------------------------------
ABCabc

SQL> select listagg(s) within group (order by nlssort(s))
  2    from(select substr('CBAcba',level,1) s
  3    from dual
  4    connect by level<=length('CBAcba'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYNLSSORT(S))
-----------------------------------------------------------
AaBbCc

SQL> 




T.e. просто используй:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select listagg(s) within group (order by nlssort(s,'nls_sort=latin_ci'))
  2    from(select substr('CBAcba',level,1) s
  3    from dual
  4    connect by level<=length('CBAcba'))
  5  /

LISTAGG(S)WITHINGROUP(ORDERBYNLSSORT(S,'NLS_SORT=LATIN_CI'))
-----------------------------------------------------------------------------------
AaBbCc

SQL> 



SY.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39747599
const_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SkilledJuniorconst_studentСпасибо, почитаю, просто я так понимаю пузырек подойдет, если необходимый порядок сортировки совпадает с порядком кодировки символов.
Любому алгоритму сортировки потребуется числовая характеристика по которой можно ранжировать что либо, причем совершенно неважно что, можешь создать свой массив в котором определишь порядок сортировки для каждого символа.

PS: на PL/SQL можно использовать order by

А как использовать order by прямо внутри строки? Если значения в разных строках я понимаю как использовать order by, а вот если все значения в одной строке? Такой вариант не работает:

Код: plsql
1.
2.
3.
select 
from str
order by str;



ps: сорри за тупой вопрос)
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39747608
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const_studentА как использовать order by прямо внутри строки?
Никак.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39747653
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
const_studentА как использовать order by прямо внутри строки?
982183Распихать значение по строкам, отсортировать, а потом собрать ....
Вы батенька извращенец похлеще его преподов.
...
Рейтинг: 0 / 0
Сортировка символов внутри строки
    #39747658
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сортир-
уешь,
значит
существ-
уешь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сортировка символов внутри строки
    #40083291
gbdd2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
with t1 as (
select 'London Singapur' tmp from dual union all
select 'Singapur China' tmp from dual union all
select 'USA JAPAN ' tmp from dual union all
select 'JAPAN USA' tmp from dual union all
select 'Singapur London' tmp from dual
),
dst as ( select ROWNUM rwn,tmp,REGEXP_COUNT(tmp,'[^[:space:]]+') cnt_array from t1 ),

rc(id, cnt_id, tmp, CNT_ARRAY, SL) AS (
SELECT rwn id,1 cnt_id,tmp, CNT_ARRAY, regexp_substr(tmp,'[^[:space:]]+',1,1) sl FROM dst
UNION ALL
SELECT rc.id, rc.cnt_id+1 cnt_id, rc.tmp, rc.CNT_ARRAY, regexp_substr(rc.tmp,'[^[:space:]]+',1,rc.cnt_id+1) sl
FROM dst tr, rc
WHERE tr.rwn = rc.id and rc.cnt_id+1<=tr.CNT_ARRAY
),

srt as (select rc.*,row_number() over (partition by id order by id) nb,
listagg(sl,' ') WITHIN GROUP (ORDER BY sl) over(partition by id) fiel_srt
from rc)

select * from srt where nb=1
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сортировка символов внутри строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]