powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Replace
25 сообщений из 52, страница 1 из 3
Replace
    #39399466
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачка с собеседования. Как используя только один replace (не regexp_replace), обрезать строки до первого символа x.
То есть на входном наборе
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select str
from t


Получить

strabcdef12300f030123456789
...
Рейтинг: 0 / 0
Replace
    #39399479
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisКак используя только один replace (не regexp_replace), обрезать строки до первого символа x.Нельзя. Но для всяких гуёв видимость создать можно.
Код: plsql
1.
2.
chr(0)
chr(10)

...
Рейтинг: 0 / 0
Replace
    #39399494
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary Denis,

Можно один replace и один rtrim.

Слабо верится, что кто-то может такое спросить на собеседовании.
...
Рейтинг: 0 / 0
Replace
    #39399500
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopLary Denis,

Можно один replace и один rtrim.

Слабо верится, что кто-то может такое спросить на собеседовании.А, еще недокументированный reverse. :)
...
Рейтинг: 0 / 0
Replace
    #39399504
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopМожно один replace и один rtrim.Икс останется.
...
Рейтинг: 0 / 0
Replace
    #39399515
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Код: plaintext
replace(str, ltrim(str, '1234567890abcdefghijklmnopqrstuvwyz'))
...
Рейтинг: 0 / 0
Replace
    #39399525
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop
Код: plaintext
'1234567890abcdefghijklmnopqrstuvwyz'
Магия исходных данных. При том, что задача сформулирована в общем виде.
...
Рейтинг: 0 / 0
Replace
    #39399528
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Насколько серьезная сама задача, настолько серьезное решение.
...
Рейтинг: 0 / 0
Replace
    #39399537
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopНасколько серьезная сама задача, настолько серьезное решение.Условия всё равно ж не выполнены.
...
Рейтинг: 0 / 0
Replace
    #39399543
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicУсловия всё равно ж не выполнены.

А условия из серии "казнить нельзя помиловать". Значит ли "один replace" replace и только replace или replace может использоваться только один раз.

SY.
...
Рейтинг: 0 / 0
Replace
    #39399549
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYЗначит ли "один replace" replace и только replace или replace может использоваться только один раз.Сам об этом задумывался. Но на "решаемость" такое трактование не влияет.
...
Рейтинг: 0 / 0
Replace
    #39399554
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select replace(str,'x',rpad('x',4000)) from t;
...
Рейтинг: 0 / 0
Replace
    #39399559
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish
Код: plsql
1.
rpad('x',4000)

Тут не "только один replace". И тоже лишь видимость :)
...
Рейтинг: 0 / 0
Replace
    #39399560
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicСам об этом задумывался. Но на "решаемость" такое трактование не влияет.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with t as (
           select 'abcdefxzw4242'   str from dual union all
           select '123x343'         str from dual union all
           select '00f03xe12x'      str from dual union all
           select '0123456789'      str from dual
          )
select  str,
        replace(str,substr(str,nullif(instr(str,'x'),0))) new_str
  from  t
/

STR           NEW_STR
------------- -------------
abcdefxzw4242 abcdef
123x343       123
00f03xe12x    00f03
0123456789    0123456789

SQL> 



Хотя replace тут как попу гармонь.

SY.
...
Рейтинг: 0 / 0
Replace
    #39399563
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYХотя replace тут как попу гармонь.Ага.
...
Рейтинг: 0 / 0
Replace
    #39399572
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бл*, что за олдфаги с детскими психотравмами дают такие задачи на собесах??
...
Рейтинг: 0 / 0
Replace
    #39399573
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ok, ok без pad-ов:

нажать на пробел и держать достаточно долго
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select replace(str,'x','x    ') from t;



а вообще, имхо (про вопрос) - дурь причем, вялая
...
Рейтинг: 0 / 0
Replace
    #39399803
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
with t as (
select 'abcdefxzw4242' str from dual union all
select '123x343' str from dual union all
select '00f03xe12x' str from dual union all
select '0123456789' str from dual
)
select regexp_replace (str,'x.*','')
from t
...
Рейтинг: 0 / 0
Replace
    #39399826
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnetregexp_replaceГлаза разул?
Lary Denis(не regexp_replace)
...
Рейтинг: 0 / 0
Replace
    #39399887
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary Denis,

А в чём сложность?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select replаce(str,'x',chr(19)||chr(27)) s from t;


S                                                                              
-----------------
abcdef                                                                          
123                                                                             
00f03                                                                           
0123456789   

 



Код: plsql
1.
2.
3.
4.
5.
6.
create or replace function replаce(i_str varchar2, i_ser varchar2, i_rep varchar2 := chr(18)) return varchar2
is
begin
 return nvl(substr(i_str,1,instr(i_str,i_ser,1)-1),i_str);
end;
/



з.ы. где вы такие собеседования находите-то? О_о
...
Рейтинг: 0 / 0
Replace
    #39399907
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary Denis,

Один replace, говорите?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select str, xmlquery('for $i in /s return replace($i,"(x).*","")' passing xmltype('<s>'||str||'</s>') returning content).GetStringVal() s
from t;
...
Рейтинг: 0 / 0
Replace
    #39399912
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

да,да, конечно технически это regexp_replace, но формально....
...
Рейтинг: 0 / 0
Replace
    #39399915
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envда,да, конечно технически это regexp_replace, но формально....Технически это XQuery.
...
Рейтинг: 0 / 0
Replace
    #39399917
env,

To: Referent

Subj: URGENT REPLACE

Replace all strings in document by its substring to first letter x.

Very urgent.

Big Boss.
...
Рейтинг: 0 / 0
Replace
    #39399928
Glays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотря что за вакансияenv,

To: Referent

Subj: URGENT REPLACE

Replace all strings in document by its substring to first letter x.

Very urgent.

Big Boss.

LENGTH можно тоже заменить на 4000, только считаться будет долго. Ну и MOD не придумал как заменить.
Код: 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.
WITH t
     AS (SELECT 'abcdefxzw4242' str FROM DUAL
         UNION ALL
         SELECT '123x343' str FROM DUAL
         UNION ALL
         SELECT '00f03xe12x' str FROM DUAL
         UNION ALL
         SELECT '0123456789' str FROM DUAL),
     asdf
     AS (    SELECT 'x' || CHR (LEVEL + 96) AS mask, 'xx' AS r_mask, LEVEL AS cnt
               FROM DUAL
         CONNECT BY LEVEL <= 23
         UNION ALL
         SELECT 'xy' AS mask, 'xx' AS r_mask, 24 AS cnt FROM DUAL
         UNION ALL
         SELECT 'xz' AS mask, 'xx' AS r_mask, 25 AS cnt FROM DUAL
         UNION ALL
             SELECT 'x' || TO_CHAR (LEVEL - 1) AS mask,
                    'xx' AS r_mask,
                    LEVEL + 25 AS cnt
               FROM DUAL
         CONNECT BY LEVEL <= 10
         UNION ALL
         SELECT 'xx' AS mask, 'x' AS r_mask, 36 AS cnt FROM DUAL
         UNION ALL
         SELECT 'x' AS mask, NULL AS r_mask, -1 AS cnt
           FROM DUAL),
     repl (str,
           mask,
           r_mask,
           cnt)
     AS (SELECT str AS str,
                mask,
                r_mask,
                LENGTH (str) * 36 AS cnt
           FROM t, asdf
          WHERE asdf.cnt = 1
         UNION ALL
         SELECT REPLACE (str, asdf.mask, asdf.r_mask) AS str,
                asdf.mask,
                asdf.r_mask,
                repl.cnt - 1 AS cnt
           FROM repl, asdf
          WHERE    asdf.cnt = MOD (repl.cnt, 36) + 1 AND repl.cnt - 1 >= 0
                OR (repl.cnt = 0 AND asdf.cnt = -1))
SELECT *
  FROM repl
 WHERE cnt = -1


Я принят?
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Replace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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