Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как вырезать кусок из строки  [new]
wiki11111
Guest
Добрый вечер! Подскажите, пожалуйста, как можно строку разбить на несколько строк, т.е. у нас есть такая строка:
name
Сильный ветер Яркое солнце Ясный день Теплое море


Нужно разбить ее на части там, где запятая (частей не обязательно 4) и в результате должна получится такая строка:

windsundaysea
СильныйЯркоеЯсныйТеплое
19 дек 08, 16:57    [6596453]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
wiki111111
Guest
wiki11111
Добрый вечер! Подскажите, пожалуйста, как можно строку разбить на несколько строк, т.е. у нас есть такая строка:
name
Сильный ветер Яркое солнце Ясный день Теплое море



не то получилось. Исходная строка выглядит следующим образом:

name
----------------------
Сильный ветер, Яркое солнце, Ясный день, Теплое море
19 дек 08, 17:05    [6596510]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Если с таким названием столбцов, то Вам к искусственному интелекту :)
Разбить несложно (instr+substr), вопрос с переменным количеством столбцев - либо откажитесь от этого, либо Вам к динамике...
19 дек 08, 17:07    [6596526]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
wiki111111
Guest
Jannny
Если с таким названием столбцов, то Вам к искусственному интелекту :)
Разбить несложно (instr+substr), вопрос с переменным количеством столбцев - либо откажитесь от этого, либо Вам к динамике...

а если фиксированное количество как это можно сделать?
19 дек 08, 17:11    [6596558]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
wiki111111
а если фиксированное количество как это можно сделать?
С чем сложности?
19 дек 08, 17:14    [6596591]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
wiki111111
Guest
Jannny,
если писать в instr поиск по 'солнце, ', то не понятно сколько символов до этого слова нужно вставить в поле sun. Возможно, я уже туплю под вечер, но вообще я не очень опытный пользователь
19 дек 08, 17:40    [6596810]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
wiki111111,

Ищи запятую.
19 дек 08, 17:47    [6596852]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
На 10 можно попробовать примерно так (возможно, можно и попроще - думать лень)
SQL> 
with tab as (select 'Сильный ветер, Яркое солнце, Ясный день, Теплое море' str from dual)
------------------------------------------------------------------------------------------
select str
     , regexp_substr( ','||ltrim(str,','),'[[:alpha:]]+'
                    , instr(','||ltrim(str,','),',',1
                           ,1  -- Порядковый номер подстроки
                    )) str1
     , regexp_substr( ','||ltrim(str,','),'[[:alpha:]]+'
                    , instr(','||ltrim(str,','),',',1
                           ,2  -- Порядковый номер подстроки
                    )) str2
     , regexp_substr( ','||ltrim(str,','),'[[:alpha:]]+'
                    , instr(','||ltrim(str,','),',',1
                           ,3  -- Порядковый номер подстроки
                    )) str3
     , regexp_substr( ','||ltrim(str,','),'[[:alpha:]]+'
                    , instr(','||ltrim(str,','),',',1
                           ,4  -- Порядковый номер подстроки
                    )) str4
from tab;

STR                         STR1     STR2     STR3     STR4
--------------------------- -------- -------- -------- --------
Сильный ветер, Яркое солнце Сильный  Яркое    Ясный    Теплое
, Ясный день, Теплое море                              


SQL> 
19 дек 08, 23:31    [6597564]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3778
wiki11111,

транспонируйте дальше сами

  SELECT EXTRACTVALUE(xt.column_value,'/property/name'),EXTRACTVALUE(xt.column_value,'property/value')
             FROM   TABLE(XMLSEQUENCE
                    ( EXTRACT
                      ( XMLTYPE('<data><property><value>'
                 || REPLACE (
                       REPLACE (
                          'Сильный ветер, Яркое солнце, Ясный день, Теплое море',
                          ', ',
                          '</name></property><property><value>'
                       ),
                       ' ',
                       '</value><name>'
                    )
                 || '</name></property></data>')
                      , '/data/property') )) xt ;
20 дек 08, 00:18    [6597711]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
set linesize 132
column c1 new_value c1 noprint
column c2 new_value c2 noprint
column c3 new_value c3 noprint
column c4 new_value c4 noprint
with tab as (select 'Strong wind,Bright sun,Clear day,Warm sea' str from dual)
select  ltrim(regexp_substr(str,' [[:alpha:]]+',1,1)) c1,
        ltrim(regexp_substr(str,' [[:alpha:]]+',1,2)) c2,
        ltrim(regexp_substr(str,' [[:alpha:]]+',1,3)) c3,
        ltrim(regexp_substr(str,' [[:alpha:]]+',1,4)) c4
  from  tab
/
column &c1 format a10
column &c2 format a10
column &c3 format a10
column &c4 format a10
with tab as (select 'Strong wind,Bright sun,Clear day,Warm sea' str from dual)
select  str,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,1),',') &c1,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,2),',') &c2,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,3),',') &c3,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,4),',') &c4
  from  tab
/

SQL> set linesize 132
SQL> column c1 new_value c1 noprint
SQL> column c2 new_value c2 noprint
SQL> column c3 new_value c3 noprint
SQL> column c4 new_value c4 noprint
SQL> with tab as (select 'Strong wind,Bright sun,Clear day,Warm sea' str from dual)
  2  select  ltrim(regexp_substr(str,' [[:alpha:]]+',1,1)) c1,
  3          ltrim(regexp_substr(str,' [[:alpha:]]+',1,2)) c2,
  4          ltrim(regexp_substr(str,' [[:alpha:]]+',1,3)) c3,
  5          ltrim(regexp_substr(str,' [[:alpha:]]+',1,4)) c4
  6    from  tab
  7  /




SQL> column &c1 format a10
SQL> column &c2 format a10
SQL> column &c3 format a10
SQL> column &c4 format a10
SQL> with tab as (select 'Strong wind,Bright sun,Clear day,Warm sea' str from dual)
  2  select  str,
  3          ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,1),',') &c1,
  4          ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,2),',') &c2,
  5          ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,3),',') &c3,
  6          ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,4),',') &c4
  7    from  tab
  8  /
old   3:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,1),',') &c1,
new   3:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,1),',') wind,
old   4:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,2),',') &c2,
new   4:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,2),',') sun,
old   5:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,3),',') &c3,
new   5:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,3),',') day,
old   6:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,4),',') &c4
new   6:         ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,4),',') sea

STR                                       WIND       SUN        DAY        SEA
----------------------------------------- ---------- ---------- ---------- ----------
Strong wind,Bright sun,Clear day,Warm sea Strong     Bright     Clear      Warm

SQL> 
SY.
20 дек 08, 03:03    [6597987]     Ответить | Цитировать Сообщить модератору
 Re: как вырезать кусок из строки  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
SY
  3          ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,1),',') &c1,

with tab as (select ' Strong wind, Bright sun, Clear day, Warm sea' str from dual)
select  str,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,1),',') c1,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,2),',') c2,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,3),',') c3,
        ltrim(regexp_substr(','||str,',[[:alpha:]]+',1,4),',') c4
  from  tab
/

STR                       C1       C2       C3       C4
------------------------- -------- -------- -------- --------
 Strong wind, Bright sun,                            
 Clear day, Warm sea                                 

with tab as (select ' Strong wind, Bright sun, Clear day, Warm sea' str from dual)
select  str,
        ltrim(ltrim(regexp_substr(','||str,',[[:space:]]*[[:alpha:]]+',1,1),',')) c1,
        ltrim(ltrim(regexp_substr(','||str,',[[:space:]]*[[:alpha:]]+',1,2),',')) c2,
        ltrim(ltrim(regexp_substr(','||str,',[[:space:]]*[[:alpha:]]+',1,3),',')) c3,
        ltrim(ltrim(regexp_substr(','||str,',[[:space:]]*[[:alpha:]]+',1,4),',')) c4
  from  tab
/

STR                       C1       C2       C3       C4
------------------------- -------- -------- -------- --------
 Strong wind, Bright sun, Strong   Bright   Clear    Warm
 Clear day, Warm sea                                 


SQL> 
20 дек 08, 12:10    [6598186]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить