首字母大写。 MySQL的

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

我试图把每个条目的第一个字母大写。

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

它几乎是一样的,你只需要改变使用CONCAT()函数而不是+运算符:

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

如果你想大写第一个字母而小写另一个,你只需要使用LCASE函数:

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

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

Vincents大写字母的优秀答案适用于整个列string的首字母大写。

但是,如果你想大写字母表中的每个单词的第一个字母

例如:“阿布维尔高中”

我没有在Stackoverflow中find答案。 我不得不拼凑一些我在Googlefind的答案,为上面的例子提供一个可靠的解决scheme。 它不是一个本地函数,而是MySQL版本5+允许的用户创build的函数。

如果你在MySQL上有Super / Admin用户状态,或者在你自己的计算机上有一个本地mysql安装,你可以创build一个函数(就像一个存储过程),它位于你的数据库中,可用于任何未来SQL查询D b。

我创build的函数允许我像使用MySQL的内置函数一样使用这个我称为“UC_Words”的新函数,这样我就可以像这样更新一个完整的列:

 UPDATE Table_name SET column_name = UC_Words(column_name) 

为了插入函数代码,我在创build函数的同时更改了MySQL标准分隔符(;),然后在函数创build脚本之后将其重置为正常。 我也亲自希望输出在UTF8 CHARSET中。

函数创build=

 DELIMITER || CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8_general_ci 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 ; 

这可以处理在string中的多个单词上输出大写的第一个字母。

假设你的MySQLlogin用户名有足够的权限 – 如果没有,你不能在你的个人机器上设置一个临时数据库来转换你的表,然后问你的共享主机提供商,如果他们将为你设置这个function。

您可以使用UCASE()MID()CONCAT()

 SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names; 
 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

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

如果列中有多于一个单词,那么这将不起作用,如下所示。 上面提到的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) 

或者,也许这个会帮助…

http://www.mysqludf.org/lib_mysqludf_str/index.php#str_ucwords

这很好。

UPDATE状态SET name = CONCAT(UCASE(LEFT(name,1)),LCASE(SUBSTRING(name,2)));

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

这应该很好地工作:

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

创buildfunction:

 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))) 

使用function

 UPDATE tbl_name SET col_name = UC_FIRST(col_name); 

怎么样INITCAP()UCFIRST()

从文档 –

 select ucfirst("TEST"); 

结果:testing