Corregir Cadenas

30/05/2006 - 01:22 por Pablo Rodríguez | Informe spam
Hola, cómo expresé en mi anterior post, me veo en la necesidad de corregir
ciertos campos, convertir sus contenido a Versales, o sea primera letra
mayúscula y el resto minúscula, pero pueden haber más de una palabra en el
campo... llegué a esta solución, pero tengo problemas de sintaxis..
espero que alguien me pueda decir cuál es el error

CREATE FUNCTION fnNormalizarNombres (@Nombre nvarchar(100)) RETURNS
nvarchar(100)
AS
BEGIN

DECLARE @Norm nvarchar(100);

IF CHARINDEX(' ', @Nombre) > 0
BEGIN
SET @Norm = (
UPPER(SUBSTRING(@Nombre, 1 ,1 )) +
LOWER(SUBSTRING(@Nombre, 2 ,CHARINDEX(' ', @Nombre)-1 )) + ' ' +
UPPER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+1 ,1 )) +
LOWER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+2 ,LEN (
@Nombre )))
END
ELSE
BEGIN
SET @Norm = (SELECT(UPPER(SUBSTRING(@Nombre, 1 ,1)) + SUBSTRING(@Nombre,
2, LEN (@Nombre ))))
END
RETURN @Norm
END
GO

Preguntas similare

Leer las respuestas

#1 Isaias
30/05/2006 - 01:54 | Informe spam
Pablo

Lo que esperas es:

juan carlos armando garcia de los santos

Es:

Juan Carlos Armando Garcia De Los Santos

¿Esto es?
Saludos
IIslas


"Pablo Rodríguez" escribió:

Hola, cómo expresé en mi anterior post, me veo en la necesidad de corregir
ciertos campos, convertir sus contenido a Versales, o sea primera letra
mayúscula y el resto minúscula, pero pueden haber más de una palabra en el
campo... llegué a esta solución, pero tengo problemas de sintaxis..
espero que alguien me pueda decir cuál es el error

CREATE FUNCTION fnNormalizarNombres (@Nombre nvarchar(100)) RETURNS
nvarchar(100)
AS
BEGIN

DECLARE @Norm nvarchar(100);

IF CHARINDEX(' ', @Nombre) > 0
BEGIN
SET @Norm = (
UPPER(SUBSTRING(@Nombre, 1 ,1 )) +
LOWER(SUBSTRING(@Nombre, 2 ,CHARINDEX(' ', @Nombre)-1 )) + ' ' +
UPPER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+1 ,1 )) +
LOWER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+2 ,LEN (
@Nombre )))
END
ELSE
BEGIN
SET @Norm = (SELECT(UPPER(SUBSTRING(@Nombre, 1 ,1)) + SUBSTRING(@Nombre,
2, LEN (@Nombre ))))
END
RETURN @Norm
END
GO



Respuesta Responder a este mensaje
#2 Pablo Rodríguez
30/05/2006 - 02:11 | Informe spam
SI, exactamente

"Isaias" escribió en el mensaje
news:
Pablo

Lo que esperas es:

juan carlos armando garcia de los santos

Es:

Juan Carlos Armando Garcia De Los Santos

¿Esto es?
Saludos
IIslas


"Pablo Rodríguez" escribió:

Hola, cómo expresé en mi anterior post, me veo en la necesidad de
corregir
ciertos campos, convertir sus contenido a Versales, o sea primera letra
mayúscula y el resto minúscula, pero pueden haber más de una palabra en
el
campo... llegué a esta solución, pero tengo problemas de sintaxis..
espero que alguien me pueda decir cuál es el error

CREATE FUNCTION fnNormalizarNombres (@Nombre nvarchar(100)) RETURNS
nvarchar(100)
AS
BEGIN

DECLARE @Norm nvarchar(100);

IF CHARINDEX(' ', @Nombre) > 0
BEGIN
SET @Norm = (
UPPER(SUBSTRING(@Nombre, 1 ,1 )) +
LOWER(SUBSTRING(@Nombre, 2 ,CHARINDEX(' ', @Nombre)-1 )) + ' ' +
UPPER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+1 ,1 )) +
LOWER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+2 ,LEN (
@Nombre )))
END
ELSE
BEGIN
SET @Norm = (SELECT(UPPER(SUBSTRING(@Nombre, 1 ,1)) +
SUBSTRING(@Nombre,
2, LEN (@Nombre ))))
END
RETURN @Norm
END
GO



Respuesta Responder a este mensaje
#3 BitOne®
30/05/2006 - 02:17 | Informe spam
lo primero es que solo te falta un parentesis, y lo segundo es que este
algoritmo no es lo sufucientemente bueno para
esto que intentas hacer, pues si aparece una persona con tres nombres no
dara resultado.

ejemplo :

supongamos que una persona se llama

jose maria del carmen perez montilla.

Este algoritmo que intentas implementar no te dara el resultado esperado,
por lo tanto debes de plasmarlo bien
y luego escribir el codigo,

y como te dije al principio es solo un parentesis antes del
end que te falta

saludos.

BitOne®




"Isaias" wrote in message
news:
Pablo

Lo que esperas es:

juan carlos armando garcia de los santos

Es:

Juan Carlos Armando Garcia De Los Santos

¿Esto es?
Saludos
IIslas


"Pablo Rodríguez" escribió:

> Hola, cómo expresé en mi anterior post, me veo en la necesidad de


corregir
> ciertos campos, convertir sus contenido a Versales, o sea primera letra
> mayúscula y el resto minúscula, pero pueden haber más de una palabra en


el
> campo... llegué a esta solución, pero tengo problemas de sintaxis..
> espero que alguien me pueda decir cuál es el error
>
> CREATE FUNCTION fnNormalizarNombres (@Nombre nvarchar(100)) RETURNS
> nvarchar(100)
> AS
> BEGIN
>
> DECLARE @Norm nvarchar(100);
>
> IF CHARINDEX(' ', @Nombre) > 0
> BEGIN
> SET @Norm = (
> UPPER(SUBSTRING(@Nombre, 1 ,1 )) +
> LOWER(SUBSTRING(@Nombre, 2 ,CHARINDEX(' ', @Nombre)-1 )) + ' ' +
> UPPER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+1 ,1 )) +
> LOWER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+2 ,LEN (
> @Nombre )))
> END
> ELSE
> BEGIN
> SET @Norm = (SELECT(UPPER(SUBSTRING(@Nombre, 1 ,1)) +


SUBSTRING(@Nombre,
> 2, LEN (@Nombre ))))
> END
> RETURN @Norm
> END
> GO
>
>
>
Respuesta Responder a este mensaje
#4 Pablo Rodríguez
30/05/2006 - 02:22 | Informe spam
Gracias por lo del paréntesis, ahora logré hacerlo funcionar,
y noté lo que me dices de más de un nombre, así que voy a volver a
elaborarlo...


Saludos!


"BitOne®" escribió en el mensaje
news:%
lo primero es que solo te falta un parentesis, y lo segundo es que este
algoritmo no es lo sufucientemente bueno para
esto que intentas hacer, pues si aparece una persona con tres nombres no
dara resultado.

ejemplo :

supongamos que una persona se llama

jose maria del carmen perez montilla.

Este algoritmo que intentas implementar no te dara el resultado esperado,
por lo tanto debes de plasmarlo bien
y luego escribir el codigo,

y como te dije al principio es solo un parentesis antes del
end que te falta

saludos.

BitOne®




"Isaias" wrote in message
news:
Pablo

Lo que esperas es:

juan carlos armando garcia de los santos

Es:

Juan Carlos Armando Garcia De Los Santos

¿Esto es?
Saludos
IIslas


"Pablo Rodríguez" escribió:

> Hola, cómo expresé en mi anterior post, me veo en la necesidad de


corregir
> ciertos campos, convertir sus contenido a Versales, o sea primera letra
> mayúscula y el resto minúscula, pero pueden haber más de una palabra en


el
> campo... llegué a esta solución, pero tengo problemas de sintaxis..
> espero que alguien me pueda decir cuál es el error
>
> CREATE FUNCTION fnNormalizarNombres (@Nombre nvarchar(100)) RETURNS
> nvarchar(100)
> AS
> BEGIN
>
> DECLARE @Norm nvarchar(100);
>
> IF CHARINDEX(' ', @Nombre) > 0
> BEGIN
> SET @Norm = (
> UPPER(SUBSTRING(@Nombre, 1 ,1 )) +
> LOWER(SUBSTRING(@Nombre, 2 ,CHARINDEX(' ', @Nombre)-1 )) + ' '
> +
> UPPER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+1 ,1 )) +
> LOWER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+2 ,LEN (
> @Nombre )))
> END
> ELSE
> BEGIN
> SET @Norm = (SELECT(UPPER(SUBSTRING(@Nombre, 1 ,1)) +


SUBSTRING(@Nombre,
> 2, LEN (@Nombre ))))
> END
> RETURN @Norm
> END
> GO
>
>
>




Respuesta Responder a este mensaje
#5 BitOne®
30/05/2006 - 02:42 | Informe spam
tengo tu solución.

Te paso el algoritmo no es el mas eficiente pero
puedes majorarlo, tu lo mejoraras que ahora voy a mi casita,

si en lo que llego no lo has logrado mejorar, pues lo mejoramo entre todos.
:).


alter function IniCapital( @nCadena nvarchar(100))
returns varchar(100)
as
begin

declare @nF Varchar(255)
declare @count integer

set @nf = ''
set @count = 0

while charindex(' ',@nCadena) > 0
begin

if @count = 0
set @nF = upper(substring(ltrim(rtrim(@nCadena)), 1,1)) +
substring(ltrim(rtrim(@nCadena)), 2,charindex(' ',ltrim(@nCadena))-1)
else
set @nF = @nF + upper(substring(ltrim(rtrim(@nCadena)), 1,1))
+substring(ltrim(rtrim(@nCadena)), 2,charindex('
',ltrim(rtrim(@nCadena)))-1)

set @nCadena = substring(ltrim(rtrim(@nCadena)), charindex('
',rtrim(ltrim(@nCadena)))+1, len(@nCadena))

set @count = @count + 1
end

Return @nF

end

Prueba esta que esta funcional.

Ha sido testeada con la siguiente cadena:

select dbo.IniCapital('ludwin jesus maria del carmen betwoven
junior escalante radames ortiz')


Saludos,

BitOne®
www.yocsql.com





"Pablo Rodríguez" wrote in message
news:
Gracias por lo del paréntesis, ahora logré hacerlo funcionar,
y noté lo que me dices de más de un nombre, así que voy a volver a
elaborarlo...


Saludos!


"BitOne®" escribió en el mensaje
news:%
> lo primero es que solo te falta un parentesis, y lo segundo es que este
> algoritmo no es lo sufucientemente bueno para
> esto que intentas hacer, pues si aparece una persona con tres nombres no
> dara resultado.
>
> ejemplo :
>
> supongamos que una persona se llama
>
> jose maria del carmen perez montilla.
>
> Este algoritmo que intentas implementar no te dara el resultado


esperado,
> por lo tanto debes de plasmarlo bien
> y luego escribir el codigo,
>
> y como te dije al principio es solo un parentesis antes del
> end que te falta
>
> saludos.
>
> BitOne®
>
>
>
>
> "Isaias" wrote in message
> news:
>> Pablo
>>
>> Lo que esperas es:
>>
>> juan carlos armando garcia de los santos
>>
>> Es:
>>
>> Juan Carlos Armando Garcia De Los Santos
>>
>> ¿Esto es?
>> Saludos
>> IIslas
>>
>>
>> "Pablo Rodríguez" escribió:
>>
>> > Hola, cómo expresé en mi anterior post, me veo en la necesidad de
> corregir
>> > ciertos campos, convertir sus contenido a Versales, o sea primera


letra
>> > mayúscula y el resto minúscula, pero pueden haber más de una palabra


en
> el
>> > campo... llegué a esta solución, pero tengo problemas de sintaxis..
>> > espero que alguien me pueda decir cuál es el error
>> >
>> > CREATE FUNCTION fnNormalizarNombres (@Nombre nvarchar(100)) RETURNS
>> > nvarchar(100)
>> > AS
>> > BEGIN
>> >
>> > DECLARE @Norm nvarchar(100);
>> >
>> > IF CHARINDEX(' ', @Nombre) > 0
>> > BEGIN
>> > SET @Norm = (
>> > UPPER(SUBSTRING(@Nombre, 1 ,1 )) +
>> > LOWER(SUBSTRING(@Nombre, 2 ,CHARINDEX(' ', @Nombre)-1 )) + '


'
>> > +
>> > UPPER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+1 ,1 )) +
>> > LOWER(SUBSTRING(@Nombre, CHARINDEX(' ', @Nombre)+2 ,LEN (
>> > @Nombre )))
>> > END
>> > ELSE
>> > BEGIN
>> > SET @Norm = (SELECT(UPPER(SUBSTRING(@Nombre, 1 ,1)) +
> SUBSTRING(@Nombre,
>> > 2, LEN (@Nombre ))))
>> > END
>> > RETURN @Norm
>> > END
>> > GO
>> >
>> >
>> >
>
>


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