Buscar caracteres numéricos

17/10/2005 - 19:29 por Miguel | Informe spam
Por favor, necesito saber si existe alguna función en la cual se pueda sacar
de una cadena de caracteres los que sean numéricos, por ejemplo:

AB02GF = 02
45BYTY = 45
SDCF34 = 34

He buscado en las funciones de cadenas de caracteres y no veo alguna en que
lo pueda hacer ya sea sola o combinándola.

Gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
18/10/2005 - 00:33 | Informe spam
Miguel,

La funcion no existe, pero puedes implementarla. Te seran muy util las
funciones "patindex" y "replace".

Ejemplo:

create function dbo.f1 (
@s varchar(25)
)
returns varchar(25)
as
begin
declare @c char

set @c = substring(@s, patindex('%[^0-9]%', @s), 1)

while patindex('%[^0-9]%', @s) > 0
begin
set @s = replace(@s, substring(@s, patindex('%[^0-9]%', @s), 1), '')
end

return @s
end
go

select dbo.f1('abc123def'), dbo.f1('abc123'), dbo.f1('123def'),
dbo.f1('123'), dbo.f1('abcdef')
go

Este codigo no ha sido probado.


AMB

"Miguel" wrote:

Por favor, necesito saber si existe alguna función en la cual se pueda sacar
de una cadena de caracteres los que sean numéricos, por ejemplo:

AB02GF = 02
45BYTY = 45
SDCF34 = 34

He buscado en las funciones de cadenas de caracteres y no veo alguna en que
lo pueda hacer ya sea sola o combinándola.

Gracias



Respuesta Responder a este mensaje
#2 PCID
18/10/2005 - 00:39 | Informe spam
Pues igual que Alejandro te digo que esa función no existe pero podes crear
una.

Me pareció muy interesante el código de Alejandro y lo voy a probar.
Mientras tanto te dejo una función un tanto menos "compleja" para los que no
usamos con frecuencia las opciones de condiciones sobre cadenas que utilizó
Alejandro.

Saludos,

PCID.
use northwind
go

if exists (select * from sysobjects where name = 'GetNumbers' and xtype =
'FN')
drop function GetNumbers
go

create function GetNumbers (@x varchar(255)) returns varchar(255) as
begin
declare @r varchar(255),
@i smallint,
@l smallint

set @i = 1
set @l = len(@x)
set @r = ''
while (@i <= @l)
begin
if isnumeric(substring(@x, @i, 1)) = 1 set @r = @r + substring(@x, @i, 1)
set @i = @i + 1
end

return (@r)
end
go

select dbo.GetNumbers('AB02GF')
select dbo.GetNumbers('45BYTY')
select dbo.GetNumbers('SDCF34')
go


/*



02

(1 row(s) affected)


45

(1 row(s) affected)


34

(1 row(s) affected)

*/

"Miguel" wrote:

Por favor, necesito saber si existe alguna función en la cual se pueda sacar
de una cadena de caracteres los que sean numéricos, por ejemplo:

AB02GF = 02
45BYTY = 45
SDCF34 = 34

He buscado en las funciones de cadenas de caracteres y no veo alguna en que
lo pueda hacer ya sea sola o combinándola.

Gracias



Respuesta Responder a este mensaje
#3 Alejandro Mesa
18/10/2005 - 00:41 | Informe spam
Correccion,

create function dbo.f1 (
@s varchar(25)
)
returns varchar(25)
as
begin

while patindex('%[^0-9]%', @s) > 0
begin
set @s = replace(@s, substring(@s, patindex('%[^0-9]%', @s), 1), '')
end

return @s
end
go


AMB

"Alejandro Mesa" wrote:

Miguel,

La funcion no existe, pero puedes implementarla. Te seran muy util las
funciones "patindex" y "replace".

Ejemplo:

create function dbo.f1 (
@s varchar(25)
)
returns varchar(25)
as
begin
declare @c char

set @c = substring(@s, patindex('%[^0-9]%', @s), 1)

while patindex('%[^0-9]%', @s) > 0
begin
set @s = replace(@s, substring(@s, patindex('%[^0-9]%', @s), 1), '')
end

return @s
end
go

select dbo.f1('abc123def'), dbo.f1('abc123'), dbo.f1('123def'),
dbo.f1('123'), dbo.f1('abcdef')
go

Este codigo no ha sido probado.


AMB

"Miguel" wrote:

> Por favor, necesito saber si existe alguna función en la cual se pueda sacar
> de una cadena de caracteres los que sean numéricos, por ejemplo:
>
> AB02GF = 02
> 45BYTY = 45
> SDCF34 = 34
>
> He buscado en las funciones de cadenas de caracteres y no veo alguna en que
> lo pueda hacer ya sea sola o combinándola.
>
> Gracias
>
>
>
Respuesta Responder a este mensaje
#4 PCID
18/10/2005 - 00:44 | Informe spam
La función de Alejandro también funciona bien!

Saludos,

PCID.

"Miguel" wrote:

Por favor, necesito saber si existe alguna función en la cual se pueda sacar
de una cadena de caracteres los que sean numéricos, por ejemplo:

AB02GF = 02
45BYTY = 45
SDCF34 = 34

He buscado en las funciones de cadenas de caracteres y no veo alguna en que
lo pueda hacer ya sea sola o combinándola.

Gracias



Respuesta Responder a este mensaje
#5 Alejandro Mesa
18/10/2005 - 01:49 | Informe spam
Mejora:

create function dbo.f1 (
@s varchar(25)
)
returns varchar(25)
as
begin
declare @i int

set @i = patindex('%[^0-9]%', @s)

while @i > 0
begin
set @s = replace(@s, substring(@s, @i, 1), '')
set @i = patindex('%[^0-9]%', @s)
end

return @s
end
go


AMB

"Alejandro Mesa" wrote:

Correccion,

create function dbo.f1 (
@s varchar(25)
)
returns varchar(25)
as
begin

while patindex('%[^0-9]%', @s) > 0
begin
set @s = replace(@s, substring(@s, patindex('%[^0-9]%', @s), 1), '')
end

return @s
end
go


AMB

"Alejandro Mesa" wrote:

> Miguel,
>
> La funcion no existe, pero puedes implementarla. Te seran muy util las
> funciones "patindex" y "replace".
>
> Ejemplo:
>
> create function dbo.f1 (
> @s varchar(25)
> )
> returns varchar(25)
> as
> begin
> declare @c char
>
> set @c = substring(@s, patindex('%[^0-9]%', @s), 1)
>
> while patindex('%[^0-9]%', @s) > 0
> begin
> set @s = replace(@s, substring(@s, patindex('%[^0-9]%', @s), 1), '')
> end
>
> return @s
> end
> go
>
> select dbo.f1('abc123def'), dbo.f1('abc123'), dbo.f1('123def'),
> dbo.f1('123'), dbo.f1('abcdef')
> go
>
> Este codigo no ha sido probado.
>
>
> AMB
>
> "Miguel" wrote:
>
> > Por favor, necesito saber si existe alguna función en la cual se pueda sacar
> > de una cadena de caracteres los que sean numéricos, por ejemplo:
> >
> > AB02GF = 02
> > 45BYTY = 45
> > SDCF34 = 34
> >
> > He buscado en las funciones de cadenas de caracteres y no veo alguna en que
> > lo pueda hacer ya sea sola o combinándola.
> >
> > Gracias
> >
> >
> >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida