SQL Server - Ayuda para extraer un valor numerico de una cadena

 
Vista:

Ayuda para extraer un valor numerico de una cadena

Publicado por Patricia (1 intervención) el 27/02/2007 13:18:07
Hola buenos días!

Tengo una tabla con una serie de medidas diferentes como por ejemplo éstas,

UNITOFPRICE
--------------------
Unidad
Botella de 1 litro
Caja de 500
Los 100 gr.
Caja de 100
25
Caja de 50
Botella de 1 litro
Bote de 2500 gr.
Botella de 1 litro
Botella de 1 litro
Botella de 1 litro
El litro
El litro
Caja de 250 uds.
Caja de 500 uds.
Caja de 500 uds.
Caja 250 ud.

y necesito extraer en los casos en los que constituya una unidad entera, es decir, que lleve ud o uds, el valor, supongo que se haría con un substring recorriendo la cadena que contiene ud o uds. hasta encontrar el valor pero no se muy bien que función puedo usar para saber si es o no numérico.. podeís echarme una mano?? Cómo sería la instrucción?

Muchísimas gracias por adelantado!
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:Ayuda para extraer un valor numerico de una cad

Publicado por Isaías (3308 intervenciones) el 27/02/2007 19:05:23
Paty

Veo que tienes un problema de diseño en tu tabla, aun asi, podrias hacer lo siguiente:

-- Creo mi tabla para efecto de pruebas
CREATE TABLE #UNIDADES (Unidad varchar(50))
INSERT INTO #UNIDADES VALUES('Unidad')
INSERT INTO #UNIDADES VALUES('Botella de 1 litro')
INSERT INTO #UNIDADES VALUES('Caja de 500')
INSERT INTO #UNIDADES VALUES('Los 100 gr.')
INSERT INTO #UNIDADES VALUES('Caja de 100')
INSERT INTO #UNIDADES VALUES('25')
INSERT INTO #UNIDADES VALUES('Caja de 50')
INSERT INTO #UNIDADES VALUES('Caja de 250 uds.')
INSERT INTO #UNIDADES VALUES('Caja de 500 uds.')
INSERT INTO #UNIDADES VALUES('Caja de 500 uds.')
INSERT INTO #UNIDADES VALUES('Caja 250 ud.')

-- Creo una funcion de usuario
CREATE FUNCTION udf_SeparaCadena (@Unidad varchar(50))
RETURNS varchar(50)
AS
BEGIN
DECLARE @Valor varchar(50), @POS INT
SET @Valor = ''
SET @POS = 1
WHILE 1 = 1
BEGIN
IF ISNUMERIC(SUBSTRING(@Unidad, @POS, 1)) = 0
BEGIN
SET @POS = @POS + 1
CONTINUE
END
SELECT @Valor = @Valor + SUBSTRING(@Unidad, @POS, 1)
SET @POS = @POS + 1
IF ISNUMERIC(SUBSTRING(@Unidad, @POS, 1)) = 0
BREAK
CONTINUE
END
RETURN(@Valor)
END

-- Utilizo mi funcion de usuario en el SELECT
SELECT dbo.udf_SeparaCadena(Unidad) FROM #UNIDADES WHERE Unidad LIKE '%ud%'

Observacion: No perder de vista que la funcion ISNUMERIC(), genera un TRUE, si encuentra cualquier carater de tipo NUMERICO, el PUNTO (.) es un caracter numerico, tambien el $.

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