Oracle - Problema con la funcion instr

 
Vista:

Problema con la funcion instr

Publicado por David (2 intervenciones) el 08/05/2007 18:01:13
Hola a ver si alguien me puede echar una ayudita que estoy muy liado

La funcion instr busca una cadena dentro de otra y hasta ahi todo bien por ejemplo algo asi me funciona

valor:= instr('Ruben Dario','Ruben');
Esto me devuelve 1 en este caso pero...
Si lo declaro de esta forma que es como lo necesito no funciona

nombre char(20);
nombre:='Ruben';
vvalor:= instrb('Ruben DArio',nombre);

En este caso me devuelve 0 eso si si declaro
nombre char(5);
si me funciona

alguien puede ayudarme con esto?
gracias

Todo esto es dentro de un procedimiento por si sirve para algo
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

RE:Problema con la funcion instr

Publicado por Ricardo (84 intervenciones) el 08/05/2007 18:49:47
Hola:

Probá con esto. Yo lo estoy colocando en un bloque anónimo pero vos adaptalo
al procedimiento:

Declare
vvalor number;
nombre varchar2(20);
Begin
nombre:='Ruben';
vvalor:= instrb('Ruben DArio',nombre);
dbms_output.put_line(vvalor);
End;
/

(La diferencia esta en que declaré nombre varchar2(20) y no char(20)).

Saludos.
Ricardo.
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

RE:Problema con la funcion instr

Publicado por juanpa (16 intervenciones) el 09/05/2007 20:30:02
El problema es que cuando declaras un char(n) este toma el valor que le declaras, por ejemplo char(20) te va a completar Ruben con espacios, por lo que al buscar una cadena dentro de instr asumira que nombre es de 20 caracteres y no lo encontrará.

para ello debes declarar un varchar2(20) el cual te toma los caracteres que tu declaras en forma dinamica

por ejmplo nombre:='Ruben'; //tiene 5 caracteres
nombre:='Roberto';//tiene 7 caracteres

cualquiera de las dos que le asignes a un varchar2 te lo encontrará, pero no asi con un char que es una estructura rígida.

Espero haberte ayudado.
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

Gracias, Solucionado

Publicado por David (2 intervenciones) el 10/05/2007 16:13:45
Teniais razon ambos la solucion era tomar un varchar2 y no hay ningun problema, muchas gracias!!!! Estuve por horas sin encontrar solucion
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

RE:Gracias, Solucionado

Publicado por raúl (1 intervención) el 28/06/2007 11:44:27
Eso es por que Char(20) reserva 20 caracteres fijos en la variable, así estaba comparando 'Ruben ' y con varchar2 no ocurre eso, por eso es mejor cambiarlo por varchar.
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

RE:Problema con la funcion instr

Publicado por Yoshimitsu (1 intervención) el 19/07/2007 22:59:45
yo creo que podrias usar tambien la funcion len()
no lo he porvado pero puede salir bien

nombre char(20);
nombre:='Ruben';
nombre1 char(len(nombre))
vvalor:= instrb('Ruben DArio',nombre1);
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