Измените нижний регистр на верхний (заголовок) с помощью запроса sql

я хочу изменить регистр, используя запрос sql

например, если текст: My nAme is iShAn halaRNkar (текст перемешан, т. е. он может содержать строчные или прописные буквы в любом месте сентенции)

чем я хочу, чтобы результат был: My Name Is Ishan Halarnkar

я не работал над запросами sql много. Пожалуйста, помогите.


person Ishan    schedule 09.05.2013    source источник
comment
Это будет полезно для вас. stackoverflow.com/questions/4263272/   -  person cha    schedule 09.05.2013
comment
Какая СУБД? SQL Server, MySQL или ?? Вы пробовали что-нибудь?   -  person Himanshu Jansari    schedule 09.05.2013


Ответы (4)


Ни в одной базе данных нет такой функции, которая сделает это за вас. Вы должны написать функцию, которая фактически выполняет проверку каждого слова в предложении. Пожалуйста, проверьте решения ниже:

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/

Надеюсь это поможет!

person Deminem    schedule 09.05.2013
comment
это выглядит именно так, как мне нужно, но где и как мне добавить эту функцию в мой mysql? - person v3nt; 27.08.2014
comment
@daniel Crabbe - Пожалуйста, примите мои извинения за поздний ответ. Однако вам просто нужно выполнить приведенный выше скрипт на mysql terminal с необходимыми привилегиями INSERT, чтобы добавить определяемую пользователем функцию. А затем просто выполните команду sql, как показано в данном примере. - person Deminem; 12.10.2014

Вот еще одна функция Microsoft 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
person Klay    schedule 25.02.2014

Этот SQL должен работать.

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

person Roger Ng    schedule 09.05.2013
comment
Он делает заглавной только 1-ю букву предложения вместо 1-й буквы каждого слова. - person Ishan; 09.05.2013

Сначала вам нужно создать функцию


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 

Now you just use this function

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

person Bhavin Chauhan    schedule 09.05.2013