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