Oracle - Delimitar por ;

 
Vista:

Delimitar por ;

Publicado por Jorge Alberto (2 intervenciones) el 15/08/2013 19:26:37
Buenos dias colegas, tengo un problema, tengo un campo delimitado por ;
ejem:

| Price |
195;250;345

lo que quiero logar es mostar la informacion de esta forma

| P1 | P2 | P3 |
| 194 | 250 | 345 |

tomando en cuanta que price es un solo campo

y P1,P2,P3 son 3 campos diferentes



SELECT Price

FROM MRPACE.INVY_PACE

espero me puedan hechar la mano, de antemano gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Delimitar por ;

Publicado por luis pablo (235 intervenciones) el 19/08/2013 08:12:13
Hola , por ejemplo si tengo el valor : '1111;222;333' puedo separarlo de la siguiente forma, usando dos funciones.


SELECT '1111;222;333' VALOR_ORIGINAL ,
SUBSTR('1111;222;333', 1 , INSTR('1111;222;333',';',1,1 ) -1 ) PRIMER_VALOR,
SUBSTR( SUBSTR('1111;222;333', INSTR('1111;222;333',';',1,1 ) + 1), 1 ,
INSTR(SUBSTR('1111;222;333', INSTR('1111;222;333',';',1,1 ) + 1),';',1)-1 ) SEGUNDO_VALOR,
SUBSTR( '1111;222;333' ,INSTR('1111;222;333',';',1,2 )+1 )TERCER_VALOR FROM DUAL;



Espero sea de tu utilidad....

Saludos

Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Delimitar por ;

Publicado por JORGE ALBERTO (2 intervenciones) el 27/08/2013 01:24:03
Muchas gracias luis, lo probare ya con la tabla y el campo en cuestion a ver como trabaja, te debo una estamos en contacto

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Delimitar por ;

Publicado por luis pablo (235 intervenciones) el 09/09/2013 03:23:17
De nada, estamos para difundir el conocimiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Delimitar por ;

Publicado por Alixandro (63 intervenciones) el 09/09/2013 17:47:06
Jorge, con esta función puedes lograr de forma fácil, sencilla y rápido los que quiere, solo debes pasarle la cadena, el símbolo a buscar y en que posición y lo mejor es que es reutilizable.

Ejemplo:
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
Select
Split('195;250;345',';',1) P1,
Split('195;250;345',';',2) P2,
Split('195;250;345',';',3) P3
From Dual;
 
Function Split (p_cadena     in varchar2,
                p_simbolo    in char,
                p_ocurrencia in number default 1) return varchar2 Is
--
v_txt     varchar2(200);
v_pos_ini integer := 0;
v_pos_fi  integer;
--
Begin
  -- Función que separa cadenas de texto (p_cadena) por el símbolo p_simbolo
  -- Devuelve la ocurrencia p_ocurrencia, Devuelve null si la ocurrencia no existe
  -- Devuelve el símbolo p_simbolo si no hay ningún carácter entre dos
  --ocurrencias de p_simbolo
  if p_ocurrencia > 1 then
    v_pos_ini := instr (str1 => p_cadena,
                        str2 => p_simbolo,
                        pos  => 1,
                        nth  => p_ocurrencia - 1);
  end if;
  --
  v_pos_fi := instr (str1 => p_cadena,       -- test string
                     str2 => p_simbolo,      -- string to locate
                     pos  => 1,              -- position
                     nth  => p_ocurrencia);  -- occurrence number
  --
  if v_pos_ini = v_pos_fi then
    if p_ocurrencia = 1 then
      v_txt := substr (str1 => p_cadena, pos => 1);
    end if;
  elsif v_pos_ini > v_pos_fi then
    v_txt := substr (str1 => p_cadena, pos => v_pos_ini + 1);
  elsif v_pos_fi = v_pos_ini + 1 then
    v_txt := p_simbolo;
  else
    v_txt := substr (str1 => p_cadena, pos => v_pos_ini + 1,
                     len  => (v_pos_fi - v_pos_ini) - 1);
  end if;
  --
  return v_txt;
End Split;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar