开发者社区> 问答> 正文

有没有简单的方法可以将MySQL数据转换为Title Case??mysql

我有一个MySQL表,其中一列中的所有数据都以大写形式输入,但是我需要转换为Title Case,并识别类似于Daring Fireball Title Case脚本的“小词” 。

我发现了将字符串转换为小写字母的出色解决方案,但Title Case函数似乎已被排除在我的MySQL版本之外。有没有一种优雅的方法可以做到这一点?

展开
收起
保持可爱mmm 2020-05-17 19:16:43 587 0
1 条回答
写回答
取消 提交回答
  • 尤里卡!从字面上看,我的第一个SQL函数。不提供保修。使用前备份数据。:)

    首先,定义以下功能:

    DROP FUNCTION IF EXISTS lowerword; SET GLOBAL log_bin_trust_function_creators=TRUE; DELIMITER | CREATE FUNCTION lowerword( str VARCHAR(128), word VARCHAR(5) ) RETURNS VARCHAR(128) DETERMINISTIC BEGIN DECLARE i INT DEFAULT 1; DECLARE loc INT;

    SET loc = LOCATE(CONCAT(word,' '), str, 2); IF loc > 1 THEN WHILE i <= LENGTH (str) AND loc <> 0 DO SET str = INSERT(str,loc,LENGTH(word),LCASE(word)); SET i = loc+LENGTH(word); SET loc = LOCATE(CONCAT(word,' '), str, i); END WHILE; END IF; RETURN str; END; | DELIMITER ; 这将降低在str中出现的所有单词。

    然后定义此修改后的适当功能:

    DROP FUNCTION IF EXISTS tcase; SET GLOBAL log_bin_trust_function_creators=TRUE; DELIMITER | CREATE FUNCTION tcase( str VARCHAR(128) ) RETURNS VARCHAR(128) DETERMINISTIC BEGIN DECLARE c CHAR(1); DECLARE s VARCHAR(128); 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;

    SET s = lowerword(s, 'A'); SET s = lowerword(s, 'An'); SET s = lowerword(s, 'And'); SET s = lowerword(s, 'As'); SET s = lowerword(s, 'At'); SET s = lowerword(s, 'But'); SET s = lowerword(s, 'By'); SET s = lowerword(s, 'For'); SET s = lowerword(s, 'If'); SET s = lowerword(s, 'In'); SET s = lowerword(s, 'Of'); SET s = lowerword(s, 'On'); SET s = lowerword(s, 'Or'); SET s = lowerword(s, 'The'); SET s = lowerword(s, 'To'); SET s = lowerword(s, 'Via');

    RETURN s; END; | DELIMITER ; 用法

    验证它是否按预期工作:

    SELECT tcase(title) FROM table; 用它:

    UPDATE table SET title = tcase(title); 来源:http://www.artfulsoftware.com/infotree/queries.php?& bw = 1070#122来源:stack overflow

    2020-05-17 19:16:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像