用mysql字符串函数
我有一个表与表用mysql字符串函数
abcd
abcd , pgw
ABcd , Pgw
以下数据我想输出
Abcd
Abcd , Pgw
Abcd , Pgw
资本在首都的第一个字母和字母后“”。
,使第一个字母大写使用
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
:它不working.please再次阅读问题 –
我更新答案 –
看看这个解决方案mysql-update-script-problem-all-txt-is-lower-case-just-first-letter-is-upper-cas,它应该给你足够的信息来适应你想要的东西O操作。将更新更改为SELECT等。
它不起作用 –
它从来不是一个完整的工作解决方案,只是想让你知道你能做什么,你实际上也需要自己做一些工作。你究竟做了什么没有工作?发布你刚刚尝试过的更新。 –
请不要这样做,如果你永远期望您的数据库能够很好地扩展。如果您只是将它用于个人电话簿应用程序或同样微小的数据集,那么您可以按照您的建议在select
时间内完成此操作。但是,如果你想要一个健壮的可伸缩数据库,你应该牺牲时间(速度)的空间(磁盘存储空间)。 select语句上的每行函数很少能很好地进行缩放。
这样做的一个久经考验的方法是为您已有的另一列添加相同的规范,并使用插入/更新触发器以您希望的格式填充数据。
然后,只有当您必须(当数据更新时),而不是每次读取数据时,转换的成本才会发生。这样可以在整个读取中分摊成本,这在大部分数据库中都大大超过了写入的成本。
This answer显示了一个SQL公式,它似乎与您想要的接近,但我强烈建议您在触发器中使用它,而不是每select
低效地运行它。
你必须给我们更多的信息... – juankysmith
那么“一二三”呢?应该是“一二三”还是“一二三”? – Phil
@phil:一个两个,三个 –