Sir*_*tty 26 mysql capitalization
我有一个现有的表'people_table',带有一个字段full_name
.
许多记录的"full_name"字段填充了错误的大小写.例如'fred Jones'
或'fred jones'
或'Fred jones'
.
我可以找到这些错误的条目:
SELECT * FROM people_table WHERE full_name REGEXP BINARY '^[a-z]';
Run Code Online (Sandbox Code Playgroud)
如何将每个单词的第一个字母大写?例如'fred jones'
成为'Fred Jones'
.
Vin*_*nto 56
没有MySQL功能,你必须自己编写.在以下链接中有一个实现:
http://joezack.com/index.php/2008/10/20/mysql-capitalize-function/
为了使用它,首先需要在数据库中创建该函数.例如,您可以使用MySQL Query Browser(右键单击数据库名称并选择Create new Function)来执行此操作.
创建函数后,您可以使用如下查询更新表中的值:
UPDATE users SET name = CAP_FIRST(name);
Run Code Online (Sandbox Code Playgroud)
gle*_*gui 32
如果你只需要运行一次,并且你不想创建一个函数,那么你可以做一些非常强大的事情:
UPDATE people_table SET full_name = LOWER(full_name);
UPDATE people_table SET full_name = CONCAT(UPPER(SUBSTR(full_name,1,1)),LOWER(SUBSTR(full_name,2)));
UPDATE people_table SET full_name = REPLACE(full_name,' a',' A');
UPDATE people_table SET full_name = REPLACE(full_name,' b',' B');
UPDATE people_table SET full_name = REPLACE(full_name,' c',' C');
UPDATE people_table SET full_name = REPLACE(full_name,' d',' D');
UPDATE people_table SET full_name = REPLACE(full_name,' e',' E');
UPDATE people_table SET full_name = REPLACE(full_name,' f',' F');
UPDATE people_table SET full_name = REPLACE(full_name,' g',' G');
UPDATE people_table SET full_name = REPLACE(full_name,' h',' H');
UPDATE people_table SET full_name = REPLACE(full_name,' i',' I');
UPDATE people_table SET full_name = REPLACE(full_name,' j',' J');
UPDATE people_table SET full_name = REPLACE(full_name,' k',' K');
UPDATE people_table SET full_name = REPLACE(full_name,' l',' L');
UPDATE people_table SET full_name = REPLACE(full_name,' m',' M');
UPDATE people_table SET full_name = REPLACE(full_name,' n',' N');
UPDATE people_table SET full_name = REPLACE(full_name,' o',' O');
UPDATE people_table SET full_name = REPLACE(full_name,' p',' P');
UPDATE people_table SET full_name = REPLACE(full_name,' q',' Q');
UPDATE people_table SET full_name = REPLACE(full_name,' r',' R');
UPDATE people_table SET full_name = REPLACE(full_name,' s',' S');
UPDATE people_table SET full_name = REPLACE(full_name,' t',' T');
UPDATE people_table SET full_name = REPLACE(full_name,' u',' U');
UPDATE people_table SET full_name = REPLACE(full_name,' v',' V');
UPDATE people_table SET full_name = REPLACE(full_name,' w',' W');
UPDATE people_table SET full_name = REPLACE(full_name,' x',' X');
UPDATE people_table SET full_name = REPLACE(full_name,' y',' Y');
UPDATE people_table SET full_name = REPLACE(full_name,' z',' Z');
Run Code Online (Sandbox Code Playgroud)
Ser*_*reu 16
如果要将所有单词大写,则需要调用自定义函数.
-- may help:
-- DROP function if exists capitalize;
DELIMITER $$
CREATE FUNCTION `capitalize`(s varchar(255)) RETURNS varchar(255)
BEGIN
declare c int;
declare x varchar(255);
declare y varchar(255);
declare z varchar(255);
set x = UPPER( SUBSTRING( s, 1, 1));
set y = SUBSTR( s, 2);
set c = instr( y, ' ');
while c > 0
do
set z = SUBSTR( y, 1, c);
set x = CONCAT( x, z);
set z = UPPER( SUBSTR( y, c+1, 1));
set x = CONCAT( x, z);
set y = SUBSTR( y, c+2);
set c = INSTR( y, ' ');
end while;
set x = CONCAT(x, y);
return x;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
现在你这样做:
UPDATE mytable SET thefield = capitalize(thefield);
Run Code Online (Sandbox Code Playgroud)
这是 Nicholas Thompson 的两个有用的函数。您可以将 UC_DELEMITER 的第三个变量设置为 false,第二个变量设置为“ ”以表示多个单词的大小写。
UC_FIRST 将 任何给定的字符串大写 - 此函数是 PHP 中 ucfirst 函数的克隆。
DROP FUNCTION IF EXISTS UC_FIRST;
CREATE FUNCTION UC_FIRST(oldWord VARCHAR(255)) RETURNS VARCHAR(255)
RETURN CONCAT(UCASE(SUBSTRING(oldWord, 1, 1)),SUBSTRING(oldWord, 2));
Run Code Online (Sandbox Code Playgroud)
UC_DELIMITER 在单词之间用分隔符大写
DROP FUNCTION IF EXISTS UC_DELIMITER;
DELIMITER //
CREATE FUNCTION UC_DELIMITER(
oldName VARCHAR(255), delim VARCHAR(1), trimSpaces BOOL
)
RETURNS VARCHAR(255)
BEGIN
SET @oldString := oldName;
SET @newString := "";
tokenLoop: LOOP
IF trimSpaces THEN SET @oldString := TRIM(BOTH " " FROM @oldString); END IF;
SET @splitPoint := LOCATE(delim, @oldString);
IF @splitPoint = 0 THEN
SET @newString := CONCAT(@newString, UC_FIRST(@oldString));
LEAVE tokenLoop;
END IF;
SET @newString := CONCAT(@newString, UC_FIRST(SUBSTRING(@oldString, 1, @splitPoint)));
SET @oldString := SUBSTRING(@oldString, @splitPoint+1);
END LOOP tokenLoop;
RETURN @newString;
END//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
例子:
SELECT UC_DELIMITER('eric-leroy','-',TRUE);
Eric-Leroy
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
69897 次 |
最近记录: |