Сделать первую букву заглавной. 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 имеет достаточные привилегии - если нет, и вы не можете настроить временную БД на своем персональном компьютере для преобразования ваших таблиц, тогда спросите своего поставщика общего хостинга, установят ли они эту функцию для вас.

Мартин Сансоне - MiOEE
источник
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));
владкрас
8
mysql> SELECT schedule_type AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| ENDDATE  |
+----------+
1 row in set (0.00 sec)

mysql> SELECT CONCAT(UCASE(MID(schedule_type,1,1)),LCASE(MID(schedule_type,2))) AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| Enddate  |
+----------+
1 row in set (0.00 sec)

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_mid

Корень
источник
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

shantanuo
источник
2

Это прекрасно работает.

UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
Абхинав Саху
источник
1
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Джасдип Сингх
источник
Я просто пытался выделить функцию UCASE в MySQL: P :)
Джасдип Сингх,
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 tb_Company SET CompanyIndustry = 
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
Крис Хатчинсон
источник
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 ;
Hton
источник