替换Underscore并将MySQL中的首字母大写

问题描述 投票:2回答:2

我有一个包含这样的字符串的列:

+-------------------+
|       type        |
+-------------------+
|cashback_percentage|
|   cashback_fix    |
|        fix        |
+-------------------+

和我使用的查询:

SELECT CONCAT(UCASE(LEFT(replace(type, " ", "_"), 1))) as new_type from mytable;

但我得到了这样的结果:

+-------------------+
|      new_type     |
+-------------------+
|         C         |
|         C         |
|         F         |
+-------------------+

我希望结果删除下划线并用空格替换它,并将每个单词的每个首字母大写,如下所示:

+-------------------+
|     new_type      |
+-------------------+
|Cashback Percentage|
|   Cashback Fix    |
|        Fix        |
+-------------------+
mysql string
2个回答
1
投票

你走在正确的轨道上。这种方法首先进行连接,将第一个字母大写,然后对整个字符串进行替换,以便用空格交换下划线。

SELECT
    type,
    REPLACE(CONCAT(UPPER(LEFT(type, 1)), SUBSTRING(type, 2)), '_', ' ') AS output
FROM yourTable;

enter image description here

Demo


0
投票

你可以使用Replace

select replace(type, '_', ' ') from tb

对于大写,您可以使用自定义功能

CREATE FUNCTION CAP_FIRST (input VARCHAR(255))   
RETURNS VARCHAR(255)  
DETERMINISTIC    
BEGIN
    DECLARE len INT;
    DECLARE i INT;

    SET len   = CHAR_LENGTH(input);
    SET input = LOWER(input);
    SET i = 0;

    WHILE (i < len) DO
        IF (MID(input,i,1) = ' ' OR i = 0) THEN
            IF (i < len) THEN
                SET input = CONCAT(
                    LEFT(input,i),
                    UPPER(MID(input,i + 1,1)),
                    RIGHT(input,len - i - 1)
                );
            END IF;
        END IF;
        SET i = i + 1;
    END WHILE;

    RETURN input;
END;

用法

select CAP_FIRST(replace(type, '_', ' ')) from tb

Working Fiddler

© www.soinside.com 2019 - 2024. All rights reserved.