[SQL] 어떻게 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로 할 수있는 가장 좋은 방법
SQL어떻게 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로 할 수있는 가장 좋은 방법
어떤 것은 SQL Server에서 문자열의 각 단어의 첫 글자를 대문자로하는 가장 좋은 방법입니다.
해결법
-
==============================
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.오라클에서 같은 질문에 대한 답을 찾고 있다면 / PLSQL 그런 다음이 함수 INITCAP를 사용할 수 있습니다. 다음은 값이 테이블 부서의 속성 DNAME에 대한 예입니다 (이 '판매', '관리', '생산', '개발').
오라클에서 같은 질문에 대한 답을 찾고 있다면 / PLSQL 그런 다음이 함수 INITCAP를 사용할 수 있습니다. 다음은 값이 테이블 부서의 속성 DNAME에 대한 예입니다 (이 '판매', '관리', '생산', '개발').
SQL> select INITCAP(dname) from department; INITCAP(DNAME) -------------------------------------------------- Sales Management Production Development
-
==============================
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.루프를 사용하지 않고 다른 방법 - 재귀 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.다음은 간단한 한 줄의 코드입니다.
다음은 간단한 한 줄의 코드입니다.
select LEFT(column, 1)+ lower(RIGHT(column, len(column)-1) ) from [tablename]
-
==============================
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.
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.영어 데이터 만하십시오.
영어 데이터 만하십시오.
최고 성능의 관점에서 비 효율성이 있지만, 생산성의 관점에서 효율적입니다. 한 번 계산기로 사용
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.나는 투자하는 가장 좋은 방법을 찾고 있었고, 난 간단한 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.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.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.
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.대신이 시도해야
대신이 시도해야
Select INITCAP(column_name) from table_name;
이 언급 한 속성 항목의 첫 글자를 대문자로한다.
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
'SQL' 카테고리의 다른 글
[SQL] 절 "과"MySQL을 포함하지 않음? (0) | 2020.04.06 |
---|---|
[SQL] 가입과 방법을 찾을 수 CakePHP의 (0) | 2020.04.06 |
[SQL] 어떻게 COUNT 집계에서 "제로"/ "0"을 포함하는? (0) | 2020.04.06 |
[SQL] 어떻게 인쇄 문을 사용하여 VARCHAR (MAX)를 인쇄하려면? (0) | 2020.04.06 |
[SQL] SQL 서버 에포크 소인 변환 (사람이 읽을 수있는 형식) (0) | 2020.04.06 |