使用mysql字符串函数

时间:2011-08-30 06:04:49

标签: mysql

我在表中有一个包含以下数据的表

abcd 
abcd , pgw 
ABcd , Pgw

我希望输出为

Abcd
Abcd , Pgw
Abcd , Pgw

首都的第一个字母和首字母','后面的字母。

3 个答案:

答案 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等等。