복붙노트

[SQL] 어떻게 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로 할 수있는 가장 좋은 방법

SQL

어떻게 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로 할 수있는 가장 좋은 방법

어떤 것은 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로하는 가장 좋은 방법입니다.

해결법

  1. ==============================

    1.http://www.sql-server-helper.com/functions/initcap.aspx에서

    http://www.sql-server-helper.com/functions/initcap.aspx에서

    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
    

    이 간단한 / 작은 여기에서 (그러나 모든 행에 공백이없는 경우 작업, "잘못된 길이 매개 변수 RIGHT 함수에 전달."하지 않습니다)

    http://www.devx.com/tips/Tip/17608

  2. ==============================

    2.오라클에서 같은 질문에 대한 답을 찾고 있다면 / PLSQL 그런 다음이 함수 INITCAP를 사용할 수 있습니다. 다음은 값이 테이블 부서의 속성 DNAME에 대한 예입니다 (이 '판매', '관리', '생산', '개발').

    오라클에서 같은 질문에 대한 답을 찾고 있다면 / PLSQL 그런 다음이 함수 INITCAP를 사용할 수 있습니다. 다음은 값이 테이블 부서의 속성 DNAME에 대한 예입니다 (이 '판매', '관리', '생산', '개발').

    SQL> select INITCAP(dname) from department;
    
    INITCAP(DNAME)
    --------------------------------------------------
    Sales
    Management
    Production
    Development
    
  3. ==============================

    3.나는 꽤 많은 시간에 사용했던 하나의 변화 :

    나는 꽤 많은 시간에 사용했던 하나의 변화 :

    CREATE FUNCTION [widget].[properCase](@string varchar(8000)) RETURNS varchar(8000) AS
    BEGIN   
        SET @string = LOWER(@string)
        DECLARE @i INT
        SET @i = ASCII('a')
        WHILE @i <= ASCII('z')
        BEGIN
            SET @string = REPLACE( @string, ' ' + CHAR(@i), ' ' + CHAR(@i-32))
            SET @i = @i + 1
        END
        SET @string = CHAR(ASCII(LEFT(@string, 1))-32) + RIGHT(@string, LEN(@string)-1)
        RETURN @string
    END
    

    당신은 쉽게 당신이 원하는 경우 공간 이외의 항목 후 문자를 처리하기 위해 수정할 수 있습니다.

  4. ==============================

    4.루프를 사용하지 않고 다른 방법 - 재귀 CTE 순수 세트 기반의 접근 방식

    루프를 사용하지 않고 다른 방법 - 재귀 CTE 순수 세트 기반의 접근 방식

    create function [dbo].InitCap (@value varchar(max))
    returns varchar(max) as
    begin
    
        declare
            @separator char(1) = ' ',
            @result varchar(max) = '';
    
        with r as (
            select value, cast(null as varchar(max)) [x], cast('' as varchar(max)) [char], 0 [no] from (select rtrim(cast(@value as varchar(max))) [value]) as j
            union all
            select right(value, len(value)-case charindex(@separator, value) when 0 then len(value) else charindex(@separator, value) end) [value]
            , left(r.[value], case charindex(@separator, r.value) when 0 then len(r.value) else abs(charindex(@separator, r.[value])-1) end ) [x]
            , left(r.[value], 1)
            , [no] + 1 [no]
            from r where value > '')
    
        select @result = @result +
        case
            when ascii([char]) between 97 and 122 
                then stuff(x, 1, 1, char(ascii([char])-32))
            else x
        end + @separator
        from r where x is not null;
    
        set @result = rtrim(@result);
    
        return @result;
    end
    
  5. ==============================

    5.다음은 간단한 한 줄의 코드입니다.

    다음은 간단한 한 줄의 코드입니다.

    select 
            LEFT(column, 1)+ lower(RIGHT(column, len(column)-1) )
         from [tablename]
    
  6. ==============================

    6.테이블 반환 함수로 :

    테이블 반환 함수로 :

    CREATE FUNCTION dbo.InitCap(@v AS VARCHAR(MAX))
    RETURNS TABLE
    AS
    RETURN 
    WITH a AS (
        SELECT (
            SELECT UPPER(LEFT(value, 1)) + LOWER(SUBSTRING(value, 2, LEN(value))) AS 'data()'
            FROM string_split(@v, ' ')
            FOR XML PATH (''), TYPE) ret)
    
    SELECT CAST(a.ret AS varchar(MAX)) ret from a
    GO
    

    참고 string_split는 COMPATIBILITY_LEVEL (130)를 필요로.

  7. ==============================

    7.

    BEGIN
    DECLARE @string varchar(100) = 'asdsadsd asdad asd'
    DECLARE @ResultString varchar(200) = ''
    DECLARE @index int = 1
    DECLARE @flag bit = 0
    DECLARE @temp varchar(2) = ''
    WHILE (@Index <LEN(@string)+1)
    BEGIN
        SET @temp = SUBSTRING(@string, @Index-1, 1)
        --select @temp
        IF @temp = ' ' OR @index = 1
            BEGIN
                SET @ResultString = @ResultString + UPPER(SUBSTRING(@string, @Index, 1))
            END
        ELSE
            BEGIN
    
                SET @ResultString = @ResultString + LOWER(SUBSTRING(@string, @Index, 1)) 
            END 
    
        SET @Index = @Index+ 1--increase the index
    END
    SELECT @ResultString
    

    종료

  8. ==============================

    8.영어 데이터 만하십시오.

    영어 데이터 만하십시오.

    최고 성능의 관점에서 비 효율성이 있지만, 생산성의 관점에서 효율적입니다. 한 번 계산기로 사용

    SELECT 
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    
    UPPER(LEFT(City,1))+LOWER(SUBSTRING(City,2,LEN(City)))
    
    ,' a', ' A')
    ,' b', ' B')
    ,' c', ' C')
    ,' d', ' D')
    ,' e', ' E')
    ,' f', ' F')
    ,' g', ' G')
    ,' h', ' H')
    ,' i', ' I')
    ,' j', ' J')
    ,' k', ' K')
    ,' l', ' L')
    ,' m', ' M')
    ,' n', ' N')
    ,' o', ' O')
    ,' p', ' P')
    ,' q', ' Q')
    ,' r', ' R')
    ,' s', ' S')
    ,' t', ' T')
    ,' u', ' U')
    ,' v', ' V')
    ,' w', ' W')
    ,' x', ' X')
    ,' y', ' Y')
    ,' z', ' Z')
    
    
    FROM [Dictionaries].[dbo].[Cities]
      WHERE Country = 'US' AND City like '% %'
      ORDER BY City
    
  9. ==============================

    9.나는 투자하는 가장 좋은 방법을 찾고 있었고, 난 간단한 SQL 스크립트를 다시

    나는 투자하는 가장 좋은 방법을 찾고 있었고, 난 간단한 SQL 스크립트를 다시

    SELECT dbo.Capitalyze를 ( '이 여러 공백 테스트입니다')를 사용하는 방법

    "이되는 테스트는 여러 공백"결과

    기능을 만들 Capitalyze (VARCHAR @input (100))     반환 VARCHAR (100) 같이 시작

    declare @index int=0
    declare @char as varchar(1)=' '
    declare @prevCharIsSpace as bit=1
    declare @Result as varchar(100)=''
    
    set @input=UPPER(LEFT(@input,1))+LOWER(SUBSTRING(@input, 2, LEN(@input)))
    set @index=PATINDEX('% _%',@input)
    if @index=0
        set @index=len(@input)
    set @Result=substring(@input,0,@index+1)
    
    WHILE (@index < len(@input))
    BEGIN
        SET @index = @index + 1
        SET @char=substring(@input,@index,1)
        if (@prevCharIsSpace=1)
        begin
            set @char=UPPER(@char)
            if (@char=' ')
                set @char=''
        end
    
        if (@char=' ')
            set @prevCharIsSpace=1
        else
            set @prevCharIsSpace=0
    
        set @Result=@Result+@char
        --print @Result
    END
    --print @Result
    return @Result
    

    종료

  10. ==============================

    10.FNAME 값 아킬이고 다음 상단 (왼쪽 (FNAME, 1)) 자본 첫 문자 (A)과 부분 문자열 함수 SUBSTRING 제공 (FNAME 2, LEN (FNAME))를 제공하는이 (khil)은 모두 다음 결과 + 사용 concate 경우 FNAME 컬럼 이름 인 (아킬)

    FNAME 값 아킬이고 다음 상단 (왼쪽 (FNAME, 1)) 자본 첫 문자 (A)과 부분 문자열 함수 SUBSTRING 제공 (FNAME 2, LEN (FNAME))를 제공하는이 (khil)은 모두 다음 결과 + 사용 concate 경우 FNAME 컬럼 이름 인 (아킬)

    select UPPER(left(fname,1))+SUBSTRING(fname,2,LEN(fname)) as fname
    FROM [dbo].[akhil]
    
  11. ==============================

    11.SQL 서버에서 2016+ 단어의 보장 순서를 제공 JSON을 사용하여 :

    SQL 서버에서 2016+ 단어의 보장 순서를 제공 JSON을 사용하여 :

    CREATE FUNCTION [dbo].[InitCap](@Text NVARCHAR(MAX))
    RETURNS NVARCHAR(MAX)
    AS
    BEGIN
        RETURN STUFF((
            SELECT ' ' + UPPER(LEFT(s.value,1)) + LOWER(SUBSTRING(s.value,2,LEN(s.value)))
            FROM OPENJSON('["' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@Text,'\','\\'),'"','\"'),CHAR(9),'\t'),CHAR(10),'\n'),' ','","') + '"]') s
            ORDER BY s.[key]
        FOR XML PATH(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)'),1,1,'');
    END
    
  12. ==============================

    12.

    IF OBJECT_ID ('dbo.fnCapitalizeFirstLetterAndChangeDelimiter') IS NOT NULL
        DROP FUNCTION dbo.fnCapitalizeFirstLetterAndChangeDelimiter
    GO
    
    CREATE FUNCTION [dbo].[fnCapitalizeFirstLetterAndChangeDelimiter] (@string NVARCHAR(MAX), @delimiter NCHAR(1), @new_delimeter NCHAR(1))
    RETURNS NVARCHAR(MAX)
    AS 
    BEGIN
        DECLARE @result NVARCHAR(MAX)
        SELECT @result = '';
        IF (LEN(@string) > 0)
            DECLARE @curr INT
            DECLARE @next INT
            BEGIN
                SELECT @curr = 1
                SELECT @next = CHARINDEX(@delimiter, @string)
                WHILE (LEN(@string) > 0)
                    BEGIN
                        SELECT @result = 
                            @result + 
                            CASE WHEN LEN(@result) > 0 THEN @new_delimeter ELSE '' END +
                            UPPER(SUBSTRING(@string, @curr, 1)) + 
                            CASE 
                                WHEN @next <> 0 
                                THEN LOWER(SUBSTRING(@string, @curr+1, @next-2))
                                ELSE LOWER(SUBSTRING(@string, @curr+1, LEN(@string)-@curr))
                            END
                        IF (@next > 0)
                            BEGIN
                                SELECT @string = SUBSTRING(@string, @next+1, LEN(@string)-@next)
                                SELECT @next = CHARINDEX(@delimiter, @string)
                            END
                        ELSE
                            SELECT @string = ''
                    END
            END
        RETURN @result
    END
    GO
    
  13. ==============================

    13.대신이 시도해야

    대신이 시도해야

    Select INITCAP(column_name) from table_name;
    

    이 언급 한 속성 항목의 첫 글자를 대문자로한다.

  14. from https://stackoverflow.com/questions/55054/what-s-the-best-way-to-capitalise-the-first-letter-of-each-word-in-a-string-in-s by cc-by-sa and MIT license