una truncar part len left ejemplos cadena sql-server tsql sql-update uppercase

sql-server - truncar - substring sql



¿Cómo actualizar los datos como primera letra mayúscula con el comando t-sql? (7)

Con el endeudamiento de la publicación anterior, esta función pone en mayúscula la primera letra de cada palabra, excepto las que tienen menos de cierta longitud de carácter, que se supone que son acrónimos. Si eso no es un problema, entonces establece el segundo argumento en 0.

CREATE function [dbo].[f_camel_exc_short_words] (@InputString 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 @OutputString VARCHAR(255) DECLARE @WordIndex INT SET @Word = '''' SET @OutputString = '''' SET @Index = 1 WHILE @Index <= LEN(@InputString)+1 BEGIN SET @Char = SUBSTRING(@InputString, @Index, 1) SET @PrevChar = CASE WHEN @Index = 1 THEN '' '' ELSE SUBSTRING(@InputString, @Index - 1, 1) END --IF @Char IN ('' '', '';'', '':'', ''!'', ''?'', '','', ''.'', ''_'', ''-'', ''/'', ''&'', '''''''', ''('') -- SET @OutputString = @OutputString + @Char IF @PrevChar IN ('' '', '';'', '':'', ''!'', ''?'', '','', ''.'', ''_'', ''-'', ''/'', ''&'', '''''''', ''('',''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'') or @Index = LEN(@InputString)+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 @OutputString = @OutputString + @Word SET @Word = '''' END SET @Word = @Word + @Char SET @Index = @Index + 1 END return @OutputString end GO

Entonces, PRINT dbo.f_camel_exc_short_words (''PIONEER EURO BOND FUND CLASS C (NON-DIST) (EUR) (OFFSHORE) ISIN LU0119429891'',4) devuelve Pioneer EURO BOND FUND Class C (N-Dist) (EUR) (Offshore) ISIN LUX1111942991

Espero eso ayude.

Tengo una tabla en mi base de datos. El nombre de mi mesa es "Empresa". Quiero cambiar los datos "nombre de la compañía" como mayúscula en la primera letra. Por ejemplo;

"ABC Company"

"DEF PLASTICIDAD"

como

"Abc Company"

"Def Plasticidad"

Sé que debo usar el comando "ACTUALIZAR". ¿Pero cómo? ¡Gracias por tu ayuda!

(CONCAT no funciona)


Con un poco de ayuda de una función de división como esta .

Intente esto, reemplace YourTable con el nombre de su tabla:

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


Prueba esto:

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


Una modificación adicional maneja posesivos (''s) y palabras que comienzan con Mc

if '' '' + @OutputString like ''% Mc%'' set @OutputString = '' '' + @OutputString set @index = CHARINDEX ( '' Mc'', @OutputString) while @Index > 0 begin set @OutputString = SUBSTRING(@outputString, 1, @index + 2) + UPPER(SUBSTRING(@outputString, @index + 3, 1)) + SUBSTRING(@outputString, @index + 4, len(@outputString)) set @index = CHARINDEX ( '' Mc'', @OutputString, @Index + 4) end set @outputstring = ltrim(rtrim(@outputstring)) if @OutputString + '' '' like ''%''''S %'' set @OutputString = ltrim(rtrim(REPLACE(@outputstring + '' '', ''''''S '', ''''''s '')))

lugar justo antes de volver


SQL Server no tiene la función Initcap como Initcap .

Puede crear UDF para Initcap.

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

Comprobando el funcionamiento de UDF

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

Puedes actualizar tu mesa como esta

update table set column=[dbo].[InitCap](column);


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


update YourTable set company_name = upper(substring(company_name,1,1)) + lower(substring(company_name, 2, len(company_name)-1)) where len(company_name) > 0

Ejemplo en vivo en SQL Fiddle.