首字母大写.MySQL的

Chi*_*hin 100 mysql string capitalize

在MySQL的说法中,有没有人知道这个TSQL的等价物?

我想把每个条目的第一个字母大写.

UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1))
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Run Code Online (Sandbox Code Playgroud)

Vin*_*ard 253

它几乎相同,您只需要更改为使用CONCAT()函数而不是+运算符:

UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
                             SUBSTRING(CompanyIndustry, 2));
Run Code Online (Sandbox Code Playgroud)

这会变成helloHello,wOrLdWOrLd,BLABLABLABLA等,如果你想为大写首字母和小写其他的,你只需要使用LCASE函数:

UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
                             LCASE(SUBSTRING(CompanyIndustry, 2)));
Run Code Online (Sandbox Code Playgroud)

请注意,UPPER和UCASE做同样的事情.


Mar*_*OEE 48

大写文森出色答卷书的第一个字母的伟大工程,只有一整列的字符串大小写..

但是,如果你想在表格列的字符串中大写字母的第一个字母怎么办?

例如:"阿比维尔高中"

我没有在Stackoverflow中找到答案.我不得不拼凑一些我在谷歌找到的答案,为上面的例子提供了可靠的解决方案.它不是本机功能,而是用户创建的MySQL版本5+允许的功能.

如果您在MySQL上拥有Super/Admin用户状态或者在您自己的计算机上安装了本地mysql,您可以创建一个FUNCTION(如存储过程),它位于您的数据库中,并且可以在以后的所有SQL查询中使用. D b.

我创建的函数允许我使用这个名为"UC_Words"的新函数,就像MySQL的内置本机函数一样,这样我就可以像这样更新一个完整的列:

UPDATE Table_name
SET column_name = UC_Words(column_name) 
Run Code Online (Sandbox Code Playgroud)

要插入功能代码,我在创建函数时更改了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 ; 
Run Code Online (Sandbox Code Playgroud)

这适用于输出字符串中多个单词的大写首字母.

假设您的MySQL登录用户名具有足够的权限 - 如果没有,并且您无法在个人计算机上设置临时数据库来转换表格,请询问您的共享主机提供商是否为您设置此功能.

  • `CHARSET utf8_general_ci`应更改为`CHARSET utf8`(至少在5.7上) (4认同)

Wou*_*elo 17

您可以使用的组合UCASE(),MID()并且CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
Run Code Online (Sandbox Code Playgroud)


Roo*_*oot 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)
Run Code Online (Sandbox Code Playgroud)

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


小智 7

这工作得很好。

UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
Run Code Online (Sandbox Code Playgroud)


sha*_*nuo 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)
Run Code Online (Sandbox Code Playgroud)

或许这个会有所帮助......

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