我在表中有一个包含以下数据的表
abcd
abcd , pgw
ABcd , Pgw
我希望输出为
Abcd
Abcd , Pgw
Abcd , Pgw
首都的第一个字母和首字母','后面的字母。
答案 0 :(得分:2)
使第一个字母大写使用此
select CONCAT(UPPER(LEFT(`field`, 1)), SUBSTRING(`field`, 2)) from mytable
也可以在逗号之后用单词声明一个函数,如:
DELIMITER ||
CREATE FUNCTION `ucwords`( str VARCHAR(128) ) RETURNS VARCHAR(128) CHARSET latin1
BEGIN
DECLARE c CHAR(1);
DECLARE s VARCHAR(128);
DECLARE i INT DEFAULT 1;
DECLARE BOOL INT DEFAULT 1;
SET s = LCASE( str );
WHILE i < LENGTH( str ) DO
BEGIN
SET c = SUBSTRING( s, i, 1 );
IF c = ',' 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;
END IF;
END;
END IF;
SET i = i+1;
END;
END WHILE;
RETURN s;
END ||
DELIMITER ;
并使用
select ucwords(`field`) from mytable
答案 1 :(得分:1)
如果曾希望您的数据库能够很好地扩展,请不要这样做。如果您只是将其用于个人电话簿应用程序或同样微小的数据集,则可以按照您的建议在select
时间内完成此操作。
但是,如果你想要一个强大的可扩展数据库,你应该牺牲空间(磁盘存储)的时间(速度)。 select语句中的每行函数很难很好地扩展。
这样做的一个历史悠久且经过测试的方法是将另一列相同的规范添加到您已有的列中,并使用插入/更新触发器以您希望的格式填充数据。
然后,只有当您需要(更新数据时),而不是每次读取数据时,才会产生转换成本。这会大大降低读取的成本,这些读取在大多数大多数数据库中都会大大超过写入。
This answer显示的SQL公式似乎与您想要的一致,但我强烈建议您在触发器中使用它,而不是每select
次低效运行它。
答案 2 :(得分:0)
看看这个解决方案mysql-update-script-problem-all-txt-is-lower-case-just-first-letter-is-upper-cas,它应该给你足够的信息来适应你想要做的事情。将更新更改为SELECT等等。