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

#6 Javier Loria
17/07/2007 - 20:27 | Informe spam
Hola Chevy:
Ese tipo de pregunta no son para tener una respuesta buena y otra mala,
la intencion es medir la forma en que enfrentas el problema. En este caso
para ver si recurres a un cursor o si la haces con una setencia mas
orientada a conjuntos.
Una alternativa (no que sea rapida, ni mucho menos) es:
ÞCLARE @Cadena VARCHAR(1000);
SET @Cadena='Prueba';

WITH Numeros AS (
SELECT 1 AS Numero
UNION ALL
SELECT Numero+1 FROM Numeros WHERE Numero<1000
)
SELECT MAX(Numero)
FROM Numeros
JOIN (SELECT @Cadena AS Cadena) AS Cadena
ON ASCII(SUBSTRING(Cadena,Numero,1 )) IS NOT NULL
OPTION (MAXRECURSION 0)
= En tu caso recurriste a un bucle, o a un cursor desarrollado
manualmente, lo que en deberia ir a "menos"; por otra parte demostro
conocimiento del lenguaje. Yo te daria el trabajo ;)
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida