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)
我在 Stackoverflow 没有找到答案。为了给上面的例子提供一个可靠的解决方案,我不得不拼凑出一些我在 Google 中找到的答案。它不是一个本机函数,而是 MySQL 版本5 + 允许的用户创建的函数。
如果您在 MySQL 上有 Super/Admin 用户状态,或者在您自己的计算机上有一个本地 MySQL 安装,那么您可以创建一个函数(就像一个存储过程) ,该函数位于您的数据库中,并且可以用于未来数据库任何部分的 SQL 查询。
我创建的函数允许我使用这个我称为“ UC _ Words”的新函数,就像 MySQL 内置的本地函数一样,这样我就可以像下面这样更新一个完整的列:
UPDATE Table_name
SET column_name = UC_Words(column_name)
为了插入函数代码,我在创建函数时更改了 MySQL 标准分隔符(;) ,然后在函数创建脚本之后将其重置为正常。我个人也希望输出是在 UTF8字符太。
函数创建 =
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 登录用户名有足够的权限——如果没有,并且您不能在您的个人机器上设置一个临时数据库来转换您的表,那么请问您的共享主机提供商是否会为您设置此功能。
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 |
+--------------+