Cómo calcular la longitud de una cadena

17/07/2007 - 18:42 por Chevy | Informe spam
Hola todos,

para consultarles cómo calcular la longitud de una cadena PERO SIN USAR LA
FUNCION LEN(), puede usarse cualquier otra funcion de SQL server excepto
LEN() *** sql server 2000.

¿Para qué lo necesito..?: pues es que me salió esa pregunta en un test en un
proceso de selección para un trabajo, no supe cómo hacerlo así que tengo la
duda.

No encontré un caracter de fin de cadena, como en C que es el ASCII 0.

Adjunto una función que hice, funciona pero me gustaría conocer otra
solución
gracias.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


create function [dbo].[fnLonCadena] ( @s varchar(3000) )
returns int
as

/*Calcula la longitud de una cadena @s
*/
begin
declare @i integer
declare @c char(1)
select @i = 1

while ascii(substring(@s,@i,1)) is not null
begin
set @i = @i + 1
set @c = substring(@s,@i,1)
convert(varchar(10),ascii(substring(@s,@i,1)))
if @i > 20 set @c=NULL
end

return(@i - 1 )
end


GO

select dbo.fnLonCadena('una cadena') , LEN('una cadena')
select dbo.fnLonCadena('123456') , LEN('123456')
select dbo.fnLonCadena('') , LEN('')
select dbo.fnLonCadena('el hijo de rana') , LEN('el hijo de rana')



Chevy

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
17/07/2007 - 19:24 | Informe spam
Hola Chevy,

Puedes utilizar la funcion DATALENGTH, pero debes tener en cuenta que esta
funcion toma en cuenta espacios a la derecha y que ademas el valor devuelto
invoulcra dos bytes para cadenas unicode.

declare @s1 varchar(25), @s2 nvarchar(25)

set @s1 = 'Microsoft '
set @s2 = 'Microsoft '

select
@s1,
len(@s1),
datalength(@s1),
@s2,
len(@s2) / 2,
datalength(@s2) / 2
go


AMB

"Chevy" wrote:

Hola todos,

para consultarles cómo calcular la longitud de una cadena PERO SIN USAR LA
FUNCION LEN(), puede usarse cualquier otra funcion de SQL server excepto
LEN() *** sql server 2000.

¿Para qué lo necesito..?: pues es que me salió esa pregunta en un test en un
proceso de selección para un trabajo, no supe cómo hacerlo así que tengo la
duda.

No encontré un caracter de fin de cadena, como en C que es el ASCII 0.

Adjunto una función que hice, funciona pero me gustaría conocer otra
solución
gracias.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


create function [dbo].[fnLonCadena] ( @s varchar(3000) )
returns int
as

/*Calcula la longitud de una cadena @s
*/
begin
declare @i integer
declare @c char(1)
select @i = 1

while ascii(substring(@s,@i,1)) is not null
begin
set @i = @i + 1
set @c = substring(@s,@i,1)
convert(varchar(10),ascii(substring(@s,@i,1)))
if @i > 20 set @c=NULL
end

return(@i - 1 )
end


GO

select dbo.fnLonCadena('una cadena') , LEN('una cadena')
select dbo.fnLonCadena('123456') , LEN('123456')
select dbo.fnLonCadena('') , LEN('')
select dbo.fnLonCadena('el hijo de rana') , LEN('el hijo de rana')



Chevy
Respuesta Responder a este mensaje
#2 Ricardo Passians
17/07/2007 - 19:25 | Informe spam
Bueno, parece una adivinanza.. :) una manera podría ser:


CHARINDEX ( '*', REPLACE (@CADENA,'*',' ')+'*')-1

/* el caracter '*' es arbitrario, podria ser cualquiera */

Saludos

Ricardo Passians


"Chevy" wrote in message
news:
Hola todos,

para consultarles cómo calcular la longitud de una cadena PERO SIN USAR LA
FUNCION LEN(), puede usarse cualquier otra funcion de SQL server excepto
LEN() *** sql server 2000.

¿Para qué lo necesito..?: pues es que me salió esa pregunta en un test en
un
proceso de selección para un trabajo, no supe cómo hacerlo así que tengo
la
duda.

No encontré un caracter de fin de cadena, como en C que es el ASCII 0.

Adjunto una función que hice, funciona pero me gustaría conocer otra
solución
gracias.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


create function [dbo].[fnLonCadena] ( @s varchar(3000) )
returns int
as

/*Calcula la longitud de una cadena @s
*/
begin
declare @i integer
declare @c char(1)
select @i = 1

while ascii(substring(@s,@i,1)) is not null
begin
set @i = @i + 1
set @c = substring(@s,@i,1)
convert(varchar(10),ascii(substring(@s,@i,1)))
if @i > 20 set @c=NULL
end

return(@i - 1 )
end


GO

select dbo.fnLonCadena('una cadena') , LEN('una cadena')
select dbo.fnLonCadena('123456') , LEN('123456')
select dbo.fnLonCadena('') , LEN('')
select dbo.fnLonCadena('el hijo de rana') , LEN('el hijo de rana')



Chevy
Respuesta Responder a este mensaje
#3 Alejandro Mesa
17/07/2007 - 19:36 | Informe spam
Corrección:

declare @s1 varchar(25), @s2 nvarchar(25)

set @s1 = 'Microsoft '
set @s2 = 'Microsoft '

select
@s1,
len(@s1),
datalength(@s1),
@s2,
len(@s2),
datalength(@s2) / 2
go


AMB

"Alejandro Mesa" wrote:

Hola Chevy,

Puedes utilizar la funcion DATALENGTH, pero debes tener en cuenta que esta
funcion toma en cuenta espacios a la derecha y que ademas el valor devuelto
invoulcra dos bytes para cadenas unicode.

declare @s1 varchar(25), @s2 nvarchar(25)

set @s1 = 'Microsoft '
set @s2 = 'Microsoft '

select
@s1,
len(@s1),
datalength(@s1),
@s2,
len(@s2) / 2,
datalength(@s2) / 2
go


AMB

"Chevy" wrote:

> Hola todos,
>
> para consultarles cómo calcular la longitud de una cadena PERO SIN USAR LA
> FUNCION LEN(), puede usarse cualquier otra funcion de SQL server excepto
> LEN() *** sql server 2000.
>
> ¿Para qué lo necesito..?: pues es que me salió esa pregunta en un test en un
> proceso de selección para un trabajo, no supe cómo hacerlo así que tengo la
> duda.
>
> No encontré un caracter de fin de cadena, como en C que es el ASCII 0.
>
> Adjunto una función que hice, funciona pero me gustaría conocer otra
> solución
> gracias.
>
> set ANSI_NULLS ON
> set QUOTED_IDENTIFIER ON
> go
>
>
> create function [dbo].[fnLonCadena] ( @s varchar(3000) )
> returns int
> as
>
> /*Calcula la longitud de una cadena @s
> */
> begin
> declare @i integer
> declare @c char(1)
> select @i = 1
>
> while ascii(substring(@s,@i,1)) is not null
> begin
> set @i = @i + 1
> set @c = substring(@s,@i,1)
> convert(varchar(10),ascii(substring(@s,@i,1)))
> if @i > 20 set @c=NULL
> end
>
> return(@i - 1 )
> end
>
>
> GO
>
> select dbo.fnLonCadena('una cadena') , LEN('una cadena')
> select dbo.fnLonCadena('123456') , LEN('123456')
> select dbo.fnLonCadena('') , LEN('')
> select dbo.fnLonCadena('el hijo de rana') , LEN('el hijo de rana')
>
>
>
> Chevy
Respuesta Responder a este mensaje
#4 Chevy
17/07/2007 - 20:24 | Informe spam
Muchas gracias Alejandro


Chevy


"Alejandro Mesa" wrote:

Corrección:

declare @s1 varchar(25), @s2 nvarchar(25)

set @s1 = 'Microsoft '
set @s2 = 'Microsoft '

select
@s1,
len(@s1),
datalength(@s1),
@s2,
len(@s2),
datalength(@s2) / 2
go


AMB

"Alejandro Mesa" wrote:

> Hola Chevy,
>
> Puedes utilizar la funcion DATALENGTH, pero debes tener en cuenta que esta
> funcion toma en cuenta espacios a la derecha y que ademas el valor devuelto
> invoulcra dos bytes para cadenas unicode.
>
> declare @s1 varchar(25), @s2 nvarchar(25)
>
> set @s1 = 'Microsoft '
> set @s2 = 'Microsoft '
>
> select
> @s1,
> len(@s1),
> datalength(@s1),
> @s2,
> len(@s2) / 2,
> datalength(@s2) / 2
> go
>
>
> AMB
>
> "Chevy" wrote:
>
> > Hola todos,
> >
> > para consultarles cómo calcular la longitud de una cadena PERO SIN USAR LA
> > FUNCION LEN(), puede usarse cualquier otra funcion de SQL server excepto
> > LEN() *** sql server 2000.
> >
> > ¿Para qué lo necesito..?: pues es que me salió esa pregunta en un test en un
> > proceso de selección para un trabajo, no supe cómo hacerlo así que tengo la
> > duda.
> >
> > No encontré un caracter de fin de cadena, como en C que es el ASCII 0.
> >
> > Adjunto una función que hice, funciona pero me gustaría conocer otra
> > solución
> > gracias.
> >
> > set ANSI_NULLS ON
> > set QUOTED_IDENTIFIER ON
> > go
> >
> >
> > create function [dbo].[fnLonCadena] ( @s varchar(3000) )
> > returns int
> > as
> >
> > /*Calcula la longitud de una cadena @s
> > */
> > begin
> > declare @i integer
> > declare @c char(1)
> > select @i = 1
> >
> > while ascii(substring(@s,@i,1)) is not null
> > begin
> > set @i = @i + 1
> > set @c = substring(@s,@i,1)
> > convert(varchar(10),ascii(substring(@s,@i,1)))
> > if @i > 20 set @c=NULL
> > end
> >
> > return(@i - 1 )
> > end
> >
> >
> > GO
> >
> > select dbo.fnLonCadena('una cadena') , LEN('una cadena')
> > select dbo.fnLonCadena('123456') , LEN('123456')
> > select dbo.fnLonCadena('') , LEN('')
> > select dbo.fnLonCadena('el hijo de rana') , LEN('el hijo de rana')
> >
> >
> >
> > Chevy
Respuesta Responder a este mensaje
#5 Chevy
17/07/2007 - 20:24 | Informe spam
Excelente...excelente


Chevy


"Ricardo Passians" wrote:

Bueno, parece una adivinanza.. :) una manera podría ser:


CHARINDEX ( '*', REPLACE (@CADENA,'*',' ')+'*')-1

/* el caracter '*' es arbitrario, podria ser cualquiera */

Saludos

Ricardo Passians


"Chevy" wrote in message
news:
> Hola todos,
>
> para consultarles cómo calcular la longitud de una cadena PERO SIN USAR LA
> FUNCION LEN(), puede usarse cualquier otra funcion de SQL server excepto
> LEN() *** sql server 2000.
>
> ¿Para qué lo necesito..?: pues es que me salió esa pregunta en un test en
> un
> proceso de selección para un trabajo, no supe cómo hacerlo así que tengo
> la
> duda.
>
> No encontré un caracter de fin de cadena, como en C que es el ASCII 0.
>
> Adjunto una función que hice, funciona pero me gustaría conocer otra
> solución
> gracias.
>
> set ANSI_NULLS ON
> set QUOTED_IDENTIFIER ON
> go
>
>
> create function [dbo].[fnLonCadena] ( @s varchar(3000) )
> returns int
> as
>
> /*Calcula la longitud de una cadena @s
> */
> begin
> declare @i integer
> declare @c char(1)
> select @i = 1
>
> while ascii(substring(@s,@i,1)) is not null
> begin
> set @i = @i + 1
> set @c = substring(@s,@i,1)
> convert(varchar(10),ascii(substring(@s,@i,1)))
> if @i > 20 set @c=NULL
> end
>
> return(@i - 1 )
> end
>
>
> GO
>
> select dbo.fnLonCadena('una cadena') , LEN('una cadena')
> select dbo.fnLonCadena('123456') , LEN('123456')
> select dbo.fnLonCadena('') , LEN('')
> select dbo.fnLonCadena('el hijo de rana') , LEN('el hijo de rana')
>
>
>
> Chevy



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida