我有一个包含这样的字符串的列:
+-------------------+
| 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 |
+-------------------+
你走在正确的轨道上。这种方法首先进行连接,将第一个字母大写,然后对整个字符串进行替换,以便用空格交换下划线。
SELECT
type,
REPLACE(CONCAT(UPPER(LEFT(type, 1)), SUBSTRING(type, 2)), '_', ' ') AS output
FROM yourTable;
你可以使用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