[sql] SQL Server : 모든 대문자를 적절한 대소 문자 / 제목 대소 문자로 설정

모두 대문자로 가져온 테이블이 있는데 적절한 케이스로 바꾸고 싶습니다. 이 작업을 완료하는 데 사용한 스크립트는 무엇입니까?



답변

트릭을 수행 할 UDF가 있습니다.

create function ProperCase(@Text as varchar(8000))
returns varchar(8000)
as
begin
  declare @Reset bit;
  declare @Ret varchar(8000);
  declare @i int;
  declare @c char(1);

  if @Text is null
    return null;

  select @Reset = 1, @i = 1, @Ret = '';

  while (@i <= len(@Text))
    select @c = substring(@Text, @i, 1),
      @Ret = @Ret + case when @Reset = 1 then UPPER(@c) else LOWER(@c) end,
      @Reset = case when @c like '[a-zA-Z]' then 0 else 1 end,
      @i = @i + 1
  return @Ret
end

그래도 데이터를 업데이트하는 데 사용해야합니다.


답변

이 기능 :

  • 공백으로 구분 된 모든 “UPPER CASE”단어 “적절한 대소 문자”
  • “소문자 단어”만 남겨 둡니다.
  • 영어가 아닌 알파벳에서도 제대로 작동합니다.
  • 최신 SQL 서버 버전의 멋진 기능을 사용하지 않는다는 점에서 이식성이 있습니다.
  • 유니 코드 지원을 위해 NCHAR 및 NVARCHAR을 사용하도록 쉽게 변경할 수있을뿐만 아니라 적합한 매개 변수 길이도 사용할 수 있습니다.
  • 공백 정의를 구성 할 수 있습니다.
CREATE FUNCTION ToProperCase(@string VARCHAR(255)) RETURNS VARCHAR(255)
AS
BEGIN
  DECLARE @i INT           -- index
  DECLARE @l INT           -- input length
  DECLARE @c NCHAR(1)      -- current char
  DECLARE @f INT           -- first letter flag (1/0)
  DECLARE @o VARCHAR(255)  -- output string
  DECLARE @w VARCHAR(10)   -- characters considered as white space

  SET @w = '[' + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(160) + ' ' + ']'
  SET @i = 1
  SET @l = LEN(@string)
  SET @f = 1
  SET @o = ''

  WHILE @i <= @l
  BEGIN
    SET @c = SUBSTRING(@string, @i, 1)
    IF @f = 1
    BEGIN
     SET @o = @o + @c
     SET @f = 0
    END
    ELSE
    BEGIN
     SET @o = @o + LOWER(@c)
    END

    IF @c LIKE @w SET @f = 1

    SET @i = @i + 1
  END

  RETURN @o
END

결과:

dbo.ToProperCase('ALL UPPER CASE and    SOME lower ÄÄ ÖÖ ÜÜ ÉÉ ØØ ĈĈ ÆÆ')
-----------------------------------------------------------------
All Upper Case and      Some lower Ää Öö Üü Éé Øø Cc Ææ


답변

UPDATE titles
  SET title =
      UPPER(LEFT(title, 1)) +
        LOWER(RIGHT(title, LEN(title) - 1))

http://sqlmag.com/t-sql/how-title-case-column-value


답변

SQL Server에서 CLR을 활성화 할 수있는 경우 (2005 이상 필요) TextInfo.ToTitleCase 기본 제공 함수 를 사용 하는 CLR 함수만들있습니다.이 함수 를 사용하면 몇 번만 문화 인식 방식으로이를 수행 할 수 있습니다. 코드 줄.


답변

나는 이것이이 스레드의 늦은 게시물이라는 것을 알고 있지만 볼 가치가 있습니다. 이 기능은 항상 나를 위해 작동합니다. 그래서 그것을 공유하는 것을 생각했습니다.

CREATE FUNCTION [dbo].[fnConvert_TitleCase] (@InputString VARCHAR(4000) )
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @OutputString VARCHAR(255)

SET @OutputString = LOWER(@InputString)
SET @Index = 2
SET @OutputString = STUFF(@OutputString, 1, 1,UPPER(SUBSTRING(@InputString,1,1)))

WHILE @Index <= LEN(@InputString)
BEGIN
    SET @Char = SUBSTRING(@InputString, @Index, 1)
    IF @Char IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&','''','(')
    IF @Index + 1 <= LEN(@InputString)
BEGIN
    IF @Char != ''''
    OR
    UPPER(SUBSTRING(@InputString, @Index + 1, 1)) != 'S'
    SET @OutputString =
    STUFF(@OutputString, @Index + 1, 1,UPPER(SUBSTRING(@InputString, @Index + 1, 1)))
END
    SET @Index = @Index + 1
END

RETURN ISNULL(@OutputString,'')
END

테스트 호출 :

select dbo.fnConvert_TitleCase(Upper('ÄÄ ÖÖ ÜÜ ÉÉ ØØ ĈĈ ÆÆ')) as test
select dbo.fnConvert_TitleCase(upper('Whatever the mind of man can conceive and believe, it can achieve. – Napoleon hill')) as test

결과 :

여기에 이미지 설명 입력


답변

나는 게임에 조금 늦었지만 이것이 더 기능적이며 러시아어, 독일어, 태국어, 베트남어 등 모든 언어에서 작동한다고 생각합니다. ‘또는-또는. 또는 (또는) 또는 공백 (분명히 :).

CREATE FUNCTION [dbo].[fnToProperCase]( @name nvarchar(500) )
RETURNS nvarchar(500)
AS
BEGIN
declare @pos    int = 1
      , @pos2   int

if (@name <> '')--or @name = lower(@name) collate SQL_Latin1_General_CP1_CS_AS or @name = upper(@name) collate SQL_Latin1_General_CP1_CS_AS)
begin
    set @name = lower(rtrim(@name))
    while (1 = 1)
    begin
        set @name = stuff(@name, @pos, 1, upper(substring(@name, @pos, 1)))
        set @pos2 = patindex('%[- ''.)(]%', substring(@name, @pos, 500))
        set @pos += @pos2
        if (isnull(@pos2, 0) = 0 or @pos > len(@name))
            break
    end
end

return @name
END
GO


답변

대소 문자가 혼합 된 데이터를 가져 오는 SSIS에서 적절한 대소 문자가있는 열에 대한 조회를 수행해야하는 경우 원본이 혼합되고 조회 원본이 적절한 경우 조회가 실패 함을 알 수 있습니다. 또한 파생 열에 대한 SQL Server 2008r2 용 SSIS는 오른쪽 및 왼쪽 함수를 사용할 수 없습니다. 저에게 적합한 솔루션은 다음과 같습니다.

UPPER(substring(input_column_name,1,1)) + LOWER(substring(input_column_name, 2, len(input_column_name)-1))