Сделать первую букву заглавной. MySQL


110

Кто-нибудь знает эквивалент этого TSQL на языке MySQL?

Я пытаюсь использовать первую букву каждой записи с заглавной буквы.

UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1))
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))

Ответы:


275

Это почти то же самое, вам просто нужно изменить использование функции CONCAT () вместо оператора +:

UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
                             SUBSTRING(CompanyIndustry, 2));

Это будет превращаться helloв Hello, wOrLdв WOrLd, BLABLAв BLABLAи т. Д. Если вы хотите использовать первую букву в верхнем регистре, а другую в нижнем регистре, вам просто нужно использовать функцию LCASE:

UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
                             LCASE(SUBSTRING(CompanyIndustry, 2)));

Обратите внимание, что UPPER и UCASE делают то же самое.


1
спасибо - я сделал то, что мне нужно. Я забыл упомянуть, что мне нужно сначала установить нижний регистр. спасибо
Chin

55

Винсент отличный ответ на заглавную первую букву отлично работает для заглавных букв только первой буквы всей строки столбца ..

НО что, если вы хотите, чтобы первая буква КАЖДОГО слова в строках столбца таблицы была прописной?

например: "Средняя школа Абвиль"

Я не нашел ответа на этот вопрос в Stackoverflow. Мне пришлось сколотить несколько ответов, которые я нашел в Google, чтобы предоставить надежное решение для приведенного выше примера. Это не собственная функция, а функция, созданная пользователем, которую позволяет MySQL версии 5+.

Если у вас есть статус пользователя Super / Admin в MySQL или у вас есть локальная установка mysql на вашем собственном компьютере, вы можете создать ФУНКЦИЮ (например, хранимую процедуру), которая находится в вашей базе данных и может использоваться во всех будущих SQL-запросах в любой части дб.

Созданная мною функция позволяет мне использовать эту новую функцию, которую я назвал «UC_Words», точно так же, как встроенные собственные функции MySQL, так что я могу обновить весь столбец следующим образом:

UPDATE Table_name
SET column_name = UC_Words(column_name) 

Чтобы вставить код функции, я изменил стандартный разделитель MySQL (;) при создании функции, а затем вернул его в нормальное состояние после сценария создания функции. Я также лично хотел, чтобы вывод тоже был в UTF8 CHARSET.

Создание функции =

DELIMITER ||  

CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8 DETERMINISTIC  
BEGIN  
  DECLARE c CHAR(1);  
  DECLARE s VARCHAR(255);  
  DECLARE i INT DEFAULT 1;  
  DECLARE bool INT DEFAULT 1;  
  DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';  
  SET s = LCASE( str );  
  WHILE i < LENGTH( str ) DO  
     BEGIN  
       SET c = SUBSTRING( s, i, 1 );  
       IF LOCATE( c, punct ) > 0 THEN  
        SET bool = 1;  
      ELSEIF bool=1 THEN  
        BEGIN  
          IF c >= 'a' AND c <= 'z' THEN  
             BEGIN  
               SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));  
               SET bool = 0;  
             END;  
           ELSEIF c >= '0' AND c <= '9' THEN  
            SET bool = 0;  
          END IF;  
        END;  
      END IF;  
      SET i = i+1;  
    END;  
  END WHILE;  
  RETURN s;  
END ||  

DELIMITER ; 

Это работает с выводом первых букв верхнего регистра для нескольких слов в строке.

Предполагая, что ваше имя пользователя для входа в MySQL имеет достаточные привилегии - если нет, и вы не можете настроить временную БД на своем персональном компьютере для преобразования ваших таблиц, тогда спросите своего поставщика общего хостинга, установят ли они эту функцию для вас.


4
CHARSET utf8_general_ciдолжен быть изменен на CHARSET utf8(по крайней мере, на 5.7)
Мануэль

@ManuelDallaLana на самом деле вы можете получить ошибку, Illegal mix of collations for operation 'concat'поэтому я думаю, просто исправьте кодировку или удалите ее и сделайте ее по умолчанию.
Аль-Мотафар,

@Alejandro В этом ответе первая буква каждого слова в строке пишется с заглавной буквы. Вопрос и принятый ответ пишутся с заглавной буквы в строке. Оба они очень полезны, но для разных случаев использования.
Лиам

Произошла ошибка, вы должны объявить 's' с кодировкой "DECLARE s VARCHAR (255) CHARSET utf8;" или вы потеряете несколько персонажей. В любом случае спасибо за это решение :-)
Жером Эрри

А также 'c': "DECLARE c CHAR (1) CHARSET utf8;"
Жером Эрри

17

Вы можете использовать комбинацию UCASE() , MID()и CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;

это не снижает все остальные буквы. ПопробуйSELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));
владкрас


5

http://forge.mysql.com/tools/tool.php?id=201

Если в столбце больше 1 слова, это не сработает, как показано ниже. Упомянутый выше UDF может помочь в этом случае.

mysql> select * from names;
+--------------+
| name         |
+--------------+
| john abraham | 
+--------------+
1 row in set (0.00 sec)

mysql> SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
+--------------+
| name         |
+--------------+
| John abraham | 
+--------------+
1 row in set (0.00 sec)

А может, это поможет ...

https://github.com/mysqludf/lib_mysqludf_str#str_ucwords




1

СОЗДАТЬ ФУНКЦИЮ:

CREATE DEFINER=`root`@`localhost` FUNCTION `UC_FIRST`(`oldWord` VARCHAR(255)) 

RETURNS varchar(255) CHARSET utf8

RETURN CONCAT( UCASE( LEFT(oldWord, 1)), LCASE(SUBSTRING(oldWord, 2)))

ИСПОЛЬЗУЙТЕ ФУНКЦИЮ

UPDATE tbl_name SET col_name = UC_FIRST(col_name);

1

Если кто-нибудь попытается записать каждое слово с большой буквы через пробел ...

CREATE FUNCTION response(name VARCHAR(40)) RETURNS VARCHAR(200) DETERMINISTIC
BEGIN
   set @m='';
   set @c=0;
   set @l=1;
   while @c <= char_length(name)-char_length(replace(name,' ','')) do
      set @c = @c+1;
      set @p = SUBSTRING_INDEX(name,' ',@c);
      set @k = substring(name,@l,char_length(@p)-@l+1);
      set @l = char_length(@k)+2;
      set @m = concat(@m,ucase(left(@k,1)),lcase(substring(@k,2)),' ');
   end while;
   return trim(@m); 
END;
CREATE PROCEDURE updateNames()
BEGIN
  SELECT response(name) AS name FROM names;
END;

Результат

+--------------+
| name         |
+--------------+
| Abdul Karim  | 
+--------------+


0
UPDATE users
SET first_name = CONCAT(UCASE(LEFT(first_name, 1)), 
                             LCASE(SUBSTRING(first_name, 2)))
,last_name = CONCAT(UCASE(LEFT(last_name, 1)), 
                             LCASE(SUBSTRING(last_name, 2)));

0
 select  CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));

Вышеупомянутая инструкция может использоваться для первой буквы CAPS, а остальные - для строчной.


-1

Uso algo simples assim;)

DELIMITER $$
DROP FUNCTION IF EXISTS `uc_frist` $$
CREATE FUNCTION `uc_frist` (str VARCHAR(200)) RETURNS varchar(200)
BEGIN
    set str:= lcase(str);
    set str:= CONCAT(UCASE(LEFT(str, 1)),SUBSTRING(str, 2));
    set str:= REPLACE(str, ' a', ' A');
    set str:= REPLACE(str, ' b', ' B');
    set str:= REPLACE(str, ' c', ' C');
    set str:= REPLACE(str, ' d', ' D');
    set str:= REPLACE(str, ' e', ' E');
    set str:= REPLACE(str, ' f', ' F');
    set str:= REPLACE(str, ' g', ' G');
    set str:= REPLACE(str, ' h', ' H');
    set str:= REPLACE(str, ' i', ' I');
    set str:= REPLACE(str, ' j', ' J');
    set str:= REPLACE(str, ' k', ' K');
    set str:= REPLACE(str, ' l', ' L');
    set str:= REPLACE(str, ' m', ' M');
    set str:= REPLACE(str, ' n', ' N');
    set str:= REPLACE(str, ' o', ' O');
    set str:= REPLACE(str, ' p', ' P');
    set str:= REPLACE(str, ' q', ' Q');
    set str:= REPLACE(str, ' r', ' R');
    set str:= REPLACE(str, ' s', ' S');
    set str:= REPLACE(str, ' t', ' T');
    set str:= REPLACE(str, ' u', ' U');
    set str:= REPLACE(str, ' v', ' V');
    set str:= REPLACE(str, ' w', ' W');
    set str:= REPLACE(str, ' x', ' X');
    set str:= REPLACE(str, ' y', ' Y');
    set str:= REPLACE(str, ' z', ' Z');
    return  str;
END $$
DELIMITER ;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.