Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   convertir mayusculas y minusculas. Solo la primera letra en Mayusculas (https://www.clubdelphi.com/foros/showthread.php?t=45941)

Delphius 18-07-2007 22:41:58

convertir mayusculas y minusculas. Solo la primera letra en Mayusculas
 
Buenas, llevo un tiempo intentando hacer que mi cabeza produzca alguna idea ingeniosa o por lo menos más sencilla ante una situación:

En mi trabajo estoy empleando SQL Server y los usuarios del sistema (que no lo hice yo) han ido ingresando los datos a su propio gusto. Hay datos tanto en minusculas como en mayusculas y esto para el jefe le resulta molesto....

Dediqué un tiempo en pensar de que modo puedo hacer para modificar todos los registros de modo tal que la unica letra en mayúscula sea la primera de cada palabra. Es decir que si en un campo existe algo como:
ABCDE FGHI JKLM, o abcde fghi jklm convertirlo a: Adcde Fghi Jklm

Lo más natural es crear un procedimiento almacenado.... pero hasta el momento no logrado hacer dicho propósito. Nunca me he topado con algo como esto.

Les agradecería, que si aguien tiene un tiempo, que me de unos consejos o guia de como proceder.

No es urgente. No hay prisa... cualquier ayuda será bien recibida.
Desde ya muchas gracias.

Saludos,
PD: Si hacen faltas detalles, veré si puedo estar en las condiciones de poder darlos a conocer.

poliburro 18-07-2007 23:54:33

Está función igual puede servirte.

Select Databae.Owner.FcMinMayTexto('PEPE PECAS pica papas')

Que sería en tu tabla

Código SQL [-]

Update Table
    Set Campo = Modificada.CampoMod
From (
        Select Llave, 
                 Databae.Owner.FcMinMayTexto(Campo) As CampoMod
          From Tabla     
       ) As Modificada
Where Table.Clave = Modificada.Llave

Suerte

Código SQL [-]
 
IF EXISTS (SELECT * 
    FROM   sysobjects 
    WHERE  name = N'FcMinMayTexto')
 DROP FUNCTION FcMinMayTexto
GO
Create  FUNCTION FcMinMayTexto
 (@Ptexto As Varchar(100))
RETURNS VarChar(100)
AS
 BEGIN
   Declare
     @ViPos As Integer,       --Define la posicion del espacio en blanco en el texto
     @VSAux  As Varchar(100), 
     @VSRes  As Varchar(100), --Almacena el texto resultado
     @VSSubS As Varchar(100)  --Almacena la subcadena cuya posicion inicia con el primer espacio en blanco encontrado dentro del texto
     
   Set @VSSubS = Upper(LTrim(RTrim(@PTexto)))
   Set @ViPos = 1  
   Set @VSRes = ''
   
   --Bloque que analiza las dos primeras letras del texto para saber donde inician las letras y convertirla a mayúscula-
   Set @VSAux = Substring(@VSSubS,@ViPos,1)
   If  Ascii(@VsAux) < 65 Or Ascii(@VsAux) > 90 Or Ascii(@VsAux) = 209
     Begin
       Set @VSAux = Substring(@VSSubS,@ViPos + 1,1)        
       If Ascii(@VsAux) < 65 Or Ascii(@VsAux) > 90 Or Ascii(@VsAux) = 209
        begin
          Set @ViPos = @ViPos + 1
        End
       Set @VSSubs = Lower(@VSSubs)
       Set @VSSubs = Substring(@VSSubS,1,@ViPos) + Upper(Substring(@VSSubS,@ViPos + 1,1)) + Substring(@VSSubS,@ViPos + 2,Len(@VSSubS))   
       Set @Vipos = 10 --De esta manera le digo al siguiente bloque si debe o no convertir a minúsculas el texto
     End
  If @ViPos < 10
    Set @VSSubs = Lower(@VSSubs)
  --El siguiente bloque separa en palabras la cadena de texto y convierte en mayuscula la primera letra de cada una
  While @ViPos > 0 
    Begin
      Set @ViPos  = charIndex(' ',@VSSubS) 
      Set @VSAux  = Substring(@VSSubS,0,@ViPos + 1)
      Set @VSAux  = Upper(Left(@VSAux,1)) + Substring(@VSAux,2,Len(@VSAux))
      Set @VSRes  = @VSRes + @VSAux
      Set @VSSubS = Substring(@VSSubS,@ViPos + 1,Len(@VSSubS)) 
    End
  Return @VSRes + Upper(Left(@VSSubS,1)) + Substring(@VSSubS,2,Len(@VSSubS))
END
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Delphius 21-07-2007 03:20:22

poliburro, muchas gracias por dedicar tiempo y esfuerzo para ayudarme.

Todavía no he probado el código que tu me pasaste... con solo verlo me doy cuenta de que posiblemente a mi me llevase meses hacer algo así.

Como no dispongo de internet en el trabajo no puedo estar preguntando en los foros si es que voy haciendo bien o mal algunas cosas... asi que si tengo nuevas novedades o dudas tendré que esperar a llegar a casa para consultar.

Muchas gracias. Lo probaré en cuanto pueda.
Saludos,


La franja horaria es GMT +2. Ahora son las 10:51:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi