SQL - situarse en un entero

   
Vista:

situarse en un entero

Publicado por david_ts86 (6 intervenciones) el 21/09/2011 10:05:56
Hola,

Necesito en sql una sentencia que me permita situarme en el primer entero de una cadena de carácteres y que me coja la longitud del campo a partir del primer entero.

Por ejemplo,

En la columna códigos tengo:

códigos

ab 456
586
abs 398
z-4852

la sentencia me tendría que retornar:

códigos
456
586
398
4852

Alguien me puede ayudar con este tema?
He probado con algo parecido a un decode y utilizar la sentencia instr para situarme por código ascii en el primer entero pero no he conseguido lograr mi proposito.

Lo que he intentado sin éxito es algo similar a:

substr(códigos, instr(¿?¿?¿) ,length(códigos))

Muchas gracias de antemano!!!
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

situarse en un entero

Publicado por leonardo_josue (877 intervenciones) el 21/09/2011 22:19:37
Hola david_ts86:

No nos dices qué manejador de BD estás utilizando, por lo que no es posible darte una respuesta puntual a tu problema, Oracle por ejemplo tiene un rico manejo en expresiones regulares para encontrar patrones

http://psoug.org/reference/regexp.html

sin embargo la mayoría de los DBMS no manejan este tipo de sintaxis, por lo que es posible que tengas que crear alguna función propia para ir leyendo caracter a caracter de tu cadena hasta encontrar la posición de tu primer número y a partir de ahí hacer el substring hasta el final de la cadena.

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

situarse en un entero

Publicado por david_ts86 (6 intervenciones) el 22/09/2011 09:28:50
Muchas gracias,

Estamos utilizando oracle.

Al final lo hemos podido solucionar con una función, tal y como indicas, caracter a caracter...

dejo el código por si a alguien le pudiera ayudar:).

$contador = 1;
$Long = length($flight_code);
$Numero_vuelo = ' ';

while ( $contador <= $Long )
begin
if ( (substr($flight_code,$contador,1) >= '0') and (substr($flight_code,$contador,1) <= '9') )
begin
$Numero_vuelo = $Numero_vuelo||substr($flight_code,$contador,1);

end

$contador = $contador + 1;

end

Return $Numero_vuelo;


Un saludo
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