126 votes

SQL Server: Définir tous les arguments UPPER en cas correct / titre

J'ai un tableau qui a été importé comme tout en majuscule et je voudrais le transformer en bon cas. Quel script avez-vous utilisé pour compléter ceci?

Je vous remercie.

133voto

Tomalak Points 150423

Cette fonction:

  • "Bon Cas" tous les "majuscules" des mots qui sont séparées par un espace blanc
  • les feuilles "en bas de casse des mots" seul
  • fonctionne correctement, même pour les non-anglais alphabets
  • portable est de ne pas utiliser certaines fonctionnalités des dernières versions de SQL server
  • vous pouvez facilement modifier pour utiliser NCHAR et NVARCHAR pour le support de l'unicode,ainsi que n'importe quel paramètre de la longueur qui vous convient
  • blanc définition de l'espace est configurable

.

CREATE FUNCTION ToProperCase(@string VARCHAR(255)) RETURNS VARCHAR(255)
AS
BEGIN
  DECLARE @i INT           -- index
  DECLARE @l INT           -- input length
  DECLARE @c NCHAR(1)      -- current char
  DECLARE @f INT           -- first letter flag (1/0)
  DECLARE @o VARCHAR(255)  -- output string
  DECLARE @w VARCHAR(10)   -- characters considered as white space

  SET @w = '[' + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(160) + ' ' + ']'
  SET @i = 0
  SET @l = LEN(@string)
  SET @f = 1
  SET @o = ''

  WHILE @i <= @l
  BEGIN
    SET @c = SUBSTRING(@string, @i, 1)
    IF @f = 1 
    BEGIN
     SET @o = @o + @c
     SET @f = 0
    END
    ELSE
    BEGIN
     SET @o = @o + LOWER(@c)
    END

    IF @c LIKE @w SET @f = 1

    SET @i = @i + 1
  END

  RETURN @o
END

Résultat:

dbo.ToProperCase('ALL UPPER CASE and    SOME lower ÄÄ ÖÖ ÜÜ ÉÉ ØØ ĈĈ ÆÆ')
-----------------------------------------------------------------
All Upper Case and  	Some lower Ää Öö Üü Éé Øø Cc Ææ

115voto

Galwegian Points 29966

Voici un fichier UDF qui fera l'affaire

 create function ProperCase(@Text as varchar(8000))
returns varchar(8000)
as
begin
   declare @Reset bit;
   declare @Ret varchar(8000);
   declare @i int;
   declare @c char(1);

   select @Reset = 1, @i=1, @Ret = '';

   while (@i <= len(@Text))
    select @c= substring(@Text,@i,1),
               @Ret = @Ret + case when @Reset=1 then UPPER(@c) else LOWER(@c) end,
               @Reset = case when @c like '[a-zA-Z]' then 0 else 1 end,
               @i = @i +1
   return @Ret
end
 

Vous devrez quand même l'utiliser pour mettre à jour vos données.

52voto

1888 Points 132
 UPDATE titles
  SET title =
      UPPER(LEFT(title, 1)) +
        LOWER(RIGHT(title, LEN(title) - 1))
 

http://sqlmag.com/t-sql/how-title-case-column-value

19voto

Greg Beech Points 55270

Si vous pouvez activer le CLR dans SQL Server (nécessite 2005 ou une version ultérieure), vous pouvez créer une fonction CLR qui utilise la fonction intégrée TextInfo.ToTitleCase qui vous permettrait de créer un moyen de le faire en tenant compte de la culture. lignes de code.

2voto

Dave DuPlantis Points 3176

Gardez simplement à l’esprit que changer correctement le texte majuscule en texte correct peut nécessiter des corrections manuelles dans certains cas. Avec des noms, par exemple: je n’apprécie pas les applications qui mal orthographient mon nom.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X