web-gelistirme-sc.com

Verileri t-sql komutu ile büyük harf ilk harf olarak nasıl güncelleyebilirim?

Veritabanımda bir masa var. Masamın adı "Şirket". "Company_name" verisini büyük harf ilk harf olarak değiştirmek istiyorum. Örneğin;

"ABC ŞİRKETİ"

"DEF PLASTICITY"

gibi

"Abc Şirketi"

"Def Plastisite"

"UPDATE" komutunu kullanmam gerektiğini biliyorum. Ama nasıl? Yardımınız için teşekkürler!

(CONCAT çalışmıyor)

17
cethint

SQL Server Oracle gibi Initcap işlevine sahip değilsiniz.

Initcap için UDF oluşturabilirsiniz.

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

UDF çalışmasının kontrol edilmesi

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

Stackoverflow Com

tablonuzu bu şekilde güncelleyebilirsiniz

update table
set column=[dbo].[InitCap](column);
24
mr_eclair
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

SQL Fiddle'da canlı örnek.

7
Andomar

This gibi bir ayrık fonksiyonun biraz yardımı ile.

Bunu deneyin, YourTable ifadesini tablo adınız ne olursa olsun ile değiştirin:

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)
1
Mikael Eriksson

Bir başka değişiklik de sahip (ler) i ve Mc ile başlayan kelimeleri ele alır.

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 ')))

i̇adeden hemen önce yerleştirin

0
Bruce Sheffer

Yukarıdaki yazıya borçlu olursak, bu işlev, kısaltmalar olarak kabul edilen, belirli bir karakter uzunluğundan daha az olanlar hariç, her Kelimenin ilk harfini büyük harf yapar. Bu bir sorun değilse, ikinci argümanı 0 olarak ayarlayın.

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
 </ kod>

Öyleyse PRINT dbo.f_camel_exc_short_words ('Pioneer EURO BOND FUND CLASS C (NON-DIST) (EUR) (OFFSHORE) ISIN LU0119429891',4) döndürür Öncü EURO BOND FUND Sınıfı C (Dist-Dist) (EUR) (Açık Deniz) ISIN LU0119429891

Umarım yardımcı olur.

0
BrownsFan

Bunu dene:

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)))
0
Myk Syk