2013-05-09 70 views
1

我想用SQL查詢來更改大小寫小寫改爲上(職稱)的情況下使用SQL查詢

例如,如果文字是:My nAme is iShAn halaRNkar(文字混亂即它可以在senetence任何地方包括小寫或大寫)

不是我所要的輸出是:My Name Is Ishan Halarnkar

我還沒有在SQL查詢的工作很多。請幫助。

+0

這將是對你有幫助。 http://stackoverflow.com/questions/4263272/capitalize-first-letter-mysql – cha 2013-05-09 09:10:20

+0

哪個RDBMS? SQL Server,MySQL或??你有嘗試過什麼嗎? – hims056 2013-05-09 09:23:59

回答

3

有在爲你做任何數據庫無此功能。你必須寫一個函數來實際檢查句子中的每個單詞。請查看以下解決方案:

MySQL的:

DELIMITER // 

    CREATE FUNCTION CAP_FIRST (input VARCHAR(255)) 

    RETURNS VARCHAR(255) 

    DETERMINISTIC 

    BEGIN 
     DECLARE len INT; 
     DECLARE i INT; 

     SET len = CHAR_LENGTH(input); 
     SET input = LOWER(input); 
     SET i = 0; 

     WHILE (i < len) DO 
      IF (MID(input,i,1) = ' ' OR i = 0) THEN 
       IF (i < len) THEN 
        SET input = CONCAT(
         LEFT(input,i), 
         UPPER(MID(input,i + 1,1)), 
         RIGHT(input,len - i - 1) 
        ); 
       END IF; 
      END IF; 
      SET i = i + 1; 
     END WHILE; 

     RETURN input; 
    END// 

DELIMITER ; 

例子:

SELECT CAP_FIRST('this is exACtly tHe same!') 

輸出:

This Is Exactly The Same! 

版權所有:

http://joezack.com/2008/10/20/mysql-capitalize-function/

希望這有助於!

+0

這看起來完全像我需要的 - 但是在哪裏以及如何將此函數添加到我的mysql? – v3nt 2014-08-27 13:40:53

+0

@丹尼爾克拉布 - 請接受我的道歉,以便延遲迴復。但是,您只需在'mysql terminal'上執行上面的腳本並具有所需的特權'INSERT'來添加用戶定義的函數。然後只需執行sql命令,如給出的示例中所示。 – Deminem 2014-10-12 14:57:34

1

該SQL應該可以工作。

SELECT UPPER(LEFT(<ColumnName>, 1)) + LOWER(RIGHT(<ColumnName>,LEN(<ColumnName>)-1)) FROM {YourTableName}

+2

它只用一個句子的第一個字母而不是每個單詞的第一個字母 – Ishan 2013-05-09 09:17:21

1

首先,你需要創建功能


CREATE FUNCTION ProperCase(@OriginalText VARCHAR(8000)) 
RETURNS VARCHAR(8000) 
BEGIN 
DECLARE @CleanedText VARCHAR(8000) 
;with 
    a1 as (select 1 as N union all select 1 union all 
     select 1  union all select 1 union all 
     select 1  union all select 1 union all 
     select 1  union all select 1 union all 
     select 1  union all select 1), 
    a2 as (select 1 as N from a1 as a cross join a1 as b), 
    a3 as (select 1 as N from a2 as a cross join a2 as b), 
    a4 as (select 1 as N from a3 as a cross join a2 as b), 
    Tally as (select top (len(@OriginalText)) row_number() over (order by N) as N from a4) 

SELECT @CleanedText = ISNULL(@CleanedText,'') + 
    --first char is always capitalized? 
CASE WHEN Tally.N = 1 THEN UPPER(SUBSTRING(@OriginalText,Tally.N,1)) 
    WHEN SUBSTRING(@OriginalText,Tally.N -1,1) = ' ' THEN UPPER(SUBSTRING(@OriginalText,Tally.N,1)) 
    ELSE LOWER(SUBSTRING(@OriginalText,Tally.N,1)) 
END 

FROM Tally   WHERE Tally.N

現在你只需要使用此功能

 
select dbo.ProperCase('My nAme is iShAn halaRNkar') 

6

這裏是另一個微軟SQL函數:

CREATE FUNCTION PROPERCASE(@TEXT AS VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    DECLARE @RESET BIT; 
    DECLARE @STR VARCHAR(MAX); 
    DECLARE @I INT; 
    DECLARE @C CHAR(1); 

    SELECT @RESET = 1, @I=1, @STR = ''; 

    WHILE (@I <= LEN(@TEXT)) 
    SELECT @C= SUBSTRING(@TEXT,@I,1), 
       @STR = @STR + 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 @STR 
END