替换小写字母并将mysql中的第一个字母大写

bvpmtnay  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(384)

我有一个包含如下字符串的列:

+-------------------+
|       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        |
+-------------------+
biswetbf

biswetbf1#

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

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

演示

5n0oy7gb

5n0oy7gb2#

你可以用 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

工作小提琴手

相关问题