2013-05-09 74 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