Comment mettre à jour datatables en majuscule avec la command t-sql?

J'ai une table sur ma database. Le nom de ma table est "Société". Je veux changer datatables "company_name" en majuscule première lettre. Par exemple;

"ABC COMPANY"

"PLASTICITÉ DEF"

comme

"Compagnie Abc"

"Def Plasticité"

Je sais que je devrais utiliser la command "UPDATE". Mais comment? Merci de votre aide!

(CONCAT ne fonctionne pas)

SQL Server Initcap fonction Initcap comme Oracle.

Vous pouvez créer une fonction UDF pour Initcap.

 CREATE FUNCTION [dbo].[InitCap] ( @InputSsortingng varchar(4000) ) RETURNS VARCHAR(4000) AS BEGIN DECLARE @Index INT DECLARE @Char CHAR(1) DECLARE @PrevChar CHAR(1) DECLARE @OutputSsortingng VARCHAR(255) SET @OutputSsortingng = LOWER(@InputSsortingng) SET @Index = 1 WHILE @Index <= LEN(@InputSsortingng) BEGIN SET @Char = SUBSTRING(@InputSsortingng, @Index, 1) SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' ELSE SUBSTRING(@InputSsortingng, @Index - 1, 1) END IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(') BEGIN IF @PrevChar != '''' OR UPPER(@Char) != 'S' SET @OutputSsortingng = STUFF(@OutputSsortingng, @Index, 1, UPPER(@Char)) END SET @Index = @Index + 1 END RETURN @OutputSsortingng END GO 

Vérification du fonctionnement de l'UDF

 select [dbo].[InitCap] ('stackoverflow com'); Stackoverflow Com 

vous pouvez mettre à jour votre tableau comme ça

 update table set column=[dbo].[InitCap](column); 
 update YourTable set company_name = upper(subssortingng(company_name,1,1)) + lower(subssortingng(company_name, 2, len(company_name)-1)) where len(company_name) > 0 

Exemple live à SQL Fiddle.

Avec un peu d'aide d'une fonction split comme celle-ci .

Essayez ceci, remplacez YourTable avec le nom de votre table:

 update T set Name = P.Name from YourTable as T cross apply (select (select upper(left(Xs, 1))+lower(stuff(Xs, 1, 1, ''))+' ' from dbo.split(' ', Name) as X for xml path(''), type).value('.', 'varchar(50)') ) as P(Name) 

Avec l'endettement au post ci-dessus, cette fonction met en majuscule la première lettre de chaque mot à l'exception de ceux qui sont inférieurs à une certaine longueur de caractère, qui sont supposés être des acronymes. Si ce n'est pas un problème, alors vous définissez le deuxième argument à 0.

 CREATE function [dbo].[f_camel_exc_short_words] (@InputSsortingng varchar(4000),@AcronymMaxLen INT ) RETURNS VARCHAR(4000) AS BEGIN DECLARE @Index INT DECLARE @Char CHAR(1) DECLARE @PrevChar CHAR(1) DECLARE @Word VARCHAR(255) DECLARE @WordChar CHAR(1) DECLARE @OutputSsortingng VARCHAR(255) DECLARE @WordIndex INT SET @Word = '' SET @OutputSsortingng = '' SET @Index = 1 WHILE @Index <= LEN(@InputSsortingng)+1 BEGIN SET @Char = SUBSTRING(@InputSsortingng, @Index, 1) SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' ELSE SUBSTRING(@InputSsortingng, @Index - 1, 1) END --IF @Char IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(') -- SET @OutputSsortingng = @OutputSsortingng + @Char IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(','0','1','2','3','4','5','6','7','8','9') or @Index = LEN(@InputSsortingng)+1 BEGIN SET @WordIndex = 1 IF LEN(@Word) > @AcronymMaxLen BEGIN WHILE @WordIndex <= LEN(@Word) BEGIN SET @WordChar = SUBSTRING(@Word,@WordIndex,1) if @WordIndex = 1 begin SET @Word = STUFF(@Word,@WordIndex,1,UPPER(@WordChar)) end else begin SET @Word = STUFF(@Word,@WordIndex,1,LOWER(@WordChar)) end SET @WordIndex = @WordIndex + 1 END END ELSE BEGIN SET @Word = UPPER(@Word) END set @OutputSsortingng = @OutputSsortingng + @Word SET @Word = '' END SET @Word = @Word + @Char SET @Index = @Index + 1 END return @OutputSsortingng end GO 

Donc PRINT dbo.f_camel_exc_short_words ('PIONEER EURO BOND FUND CLASS C (NON-DIST) (EUR) (OFFSHORE) ISIN LU0119429891',4) Pioneer EURO BOND FUND Catégorie C (NON-Dist) (EUR) (offshore) ISIN LU0119429891

J'espère que cela aide.

Essaye ça:

 declare @word as nvarchar (50) set @word = 'ABC COMPANY' select upper(left(@word, 1)) + lower(SUBSTRING(@word,2,charindex(' ', @word)-2)) + ' ' + upper(left(subssortingng(@word,charindex(' ', @word)+1,len(@word)-1),1)) + lower(SUBSTRING(@word,charindex(' ', @word)+2, len(@word))) 

Une autre modification gère les possessifs (s) et les mots commençant par Mc

 if ' ' + @OutputSsortingng like '% Mc%' set @OutputSsortingng = ' ' + @OutputSsortingng set @index = CHARINDEX ( ' Mc', @OutputSsortingng) while @Index > 0 begin set @OutputSsortingng = SUBSTRING(@outputSsortingng, 1, @index + 2) + UPPER(SUBSTRING(@outputSsortingng, @index + 3, 1)) + SUBSTRING(@outputSsortingng, @index + 4, len(@outputSsortingng)) set @index = CHARINDEX ( ' Mc', @OutputSsortingng, @Index + 4) end set @outputssortingng = lsortingm(rsortingm(@outputssortingng)) if @OutputSsortingng + ' ' like '%''S %' set @OutputSsortingng = lsortingm(rsortingm(REPLACE(@outputssortingng + ' ', '''S ', '''s '))) 

placer juste avant le return

 CREATE FUNCTION Initcap ( @myssortingng varchar(50) ) RETURNS VARCHAR(50) AS BEGIN DECLARE @val VARCHAR(50); SET @val = (select upper(left(@myssortingng,1)) + lower(subssortingng(@myssortingng,2,datalength(@myssortingng)-1)) ) RETURN @val; END;