Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сортировка символов внутри строки / 23 сообщений из 23, страница 1 из 1
10.12.2018, 19:50
    #39745603
const_student
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
Добрый день!

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

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

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

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

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

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

PS: на PL/SQL можно использовать order by
...
Рейтинг: 0 / 0
12.12.2018, 03:07
    #39746381
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
SkilledJuniorPS: на PL/SQL можно использовать order by
Распихать значение по строкам, отсортировать, а потом собрать ....
Вы батенька извращенец похлеще его преподов.
...
Рейтинг: 0 / 0
12.12.2018, 03:09
    #39746382
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
const_student если необходимый порядок сортировки совпадает с порядком кодировки символов.
В любом случае необходимый порядок сортировки можно и нужно выразить некой формулой если он не совпадает с алфавитным расположением..
...
Рейтинг: 0 / 0
12.12.2018, 07:48
    #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
12.12.2018, 09:38
    #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
12.12.2018, 09:54
    #39746454
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
А не легче ли просто составить словарь, и сортировать согласно порядка в нем.
...
Рейтинг: 0 / 0
12.12.2018, 13:37
    #39746642
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
982183не легче ли просто составить словарьНа сотню-другую тысяч юникод-символов.
...
Рейтинг: 0 / 0
12.12.2018, 14:14
    #39746672
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
mRdUKE,

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

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

Большое спасибо!
...
Рейтинг: 0 / 0
13.12.2018, 16:40
    #39747512
SY
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
13.12.2018, 18:46
    #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
13.12.2018, 19:05
    #39747608
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
const_studentА как использовать order by прямо внутри строки?
Никак.
...
Рейтинг: 0 / 0
13.12.2018, 22:17
    #39747653
SkilledJunior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
const_studentА как использовать order by прямо внутри строки?
982183Распихать значение по строкам, отсортировать, а потом собрать ....
Вы батенька извращенец похлеще его преподов.
...
Рейтинг: 0 / 0
13.12.2018, 22:34
    #39747658
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка символов внутри строки
Сортир-
уешь,
значит
существ-
уешь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
12.07.2021, 09:19
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сортировка символов внутри строки / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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