2013-10-24 56 views
0

我有串,我需要將其轉換爲資本的文本中必需的字符串,只有如何選定的文本轉換爲大寫字母

我寫查詢做到這一點使用CHARINDEX它只是找到一個如何去第二一個我只找到第二個字經指數如何找到其他的話也

select UPPER(LEFT(SUBSTRING('AHRQ utilization flag',CHARINDEX(' ','AHRQ utilization flag',0)+1, 
len('AHRQ utilization flag')),1)) 

例如,樣品輸入:

have a great day 

我想要的輸出:

Have A Great Day 

如何做到這一點.......一個建議我

+0

什麼版本的SQL Server您使用的是? –

+0

可能重複的[SQL - 大寫每個單詞的首字母](http://stackoverflow.com/questions/11653491/sql-capitalize-first-letter-of-each-word) –

+0

@MikaelEriksson我在這裏發佈了答案。在另一個問題上或這個問題上發佈標準程序是否是標準程序? –

回答

0
CREATE FUNCTION udf_vijay (@InputString VARCHAR(1000)) 
RETURNS VARCHAR(1000) 
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 
+0

vijay kumar使用這個'會成爲Vijay Kumar嗎? ('AHRQ使用標誌',CHARINDEX('','AHRQ使用標誌',0)+1, len('AHRQ使用標誌','''','AHRQ使用標誌',0)+1, –

+0

我有這個功能,但我正在通過queryselect UPPER )),1)) – mohan111

+0

'AHRQ利用標誌'在這個如何使資金'U'和資本'F' – mohan111

0

一種方法可以是:

拆分串入的第一個字符上,其餘的像這樣:

UPPER(LEFT(string)) + RIGHT(string, LEN(string) - 1) 

然後更換任何空間後跟一個字母與上殼體它如:

REPLACE(string, ' a', ' A') 

綜合以上,你可以這樣做:

SELECT 
    UPPER(LEFT('have a great day')) + 
    REPLACE((((((((((((((((((((((((((
     RIGHT('have a great day', LEN('have a great day') - 1) 
    , ' 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') 

可能需要一些調整,因爲我還沒有實際測試過

+0

你可以讓它動態嗎? –

1

您可以編寫一個函數所需的字符串轉換成駱駝情況下,下面:

CREATE FUNCTION [dbo].[fn_CamelCase] 
(@Str varchar(8000)) 
RETURNS varchar(8000) AS 
BEGIN 
    DECLARE @Result varchar(8000) 
    SET @Str = LOWER(@Str) + ' ' 
    SET @Result = '' 
    WHILE 1=1 
    BEGIN 
    IF PATINDEX('% %',@Str) = 0 BREAK 
    SET @Result = @Result + UPPER(Left(@Str,1))+ 
    SubString (@Str,2,CharIndex(' ',@Str)-1) 
    SET @Str = SubString(@Str, 
     CharIndex(' ',@Str)+1,Len(@Str)) 
    END 
    SET @Result = Left(@Result,Len(@Result)) 
    RETURN @Result 
END 
Go 

,然後調用一樣:

select 'AHRQ ' + dbo.fn_CamelCase ('utilization flag') 

SQL Fiddle Demo與MS SQL Server的

+0

+1,效果很好,我添加了演示鏈接,@ mohan111 go for this solution – Satpal

0
create function f_CamelCase 
(
    @txt nvarchar(max) 
) returns nvarchar(max) 
as 
begin 
set @txt = stuff(lower(@txt), 1,1,upper(left(@txt, 1))) 

declare @index int = 1 
while @index > 0 
begin 

    set @index = patindex('%[ ][abcdefghijklmnopqrstuvxyz]%', @txt 
      COLLATE SQL_Latin1_General_CP1_CS_AS) 

    select @txt = stuff(@txt, @index+ 1, 1, upper(substring(@txt, @index + 1, 1))) 
    where @index > 0 

end 

return @txt 
end 

測試:

select dbo.f_CamelCase('aa b A b c') 

結果:

Aa B A B C 
相關問題