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
 

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

Preguntas similares