You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器实现姓名各单词首字母大写的方法

嘿,这个需求其实很好实现!不过MySQL本身没有直接支持「每个单词首字母大写」的内置函数,所以我们得先搞个自定义函数,再搭配触发器搞定插入和更新时的自动格式化。

解决方案

步骤1:创建自定义函数实现单词首字母大写

先写一个函数,专门处理字符串的单词首字母大写(支持空格分隔的多单词):

DELIMITER //
CREATE FUNCTION INITCAP(str VARCHAR(255)) 
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE result VARCHAR(255);
    DECLARE word VARCHAR(255);
    DECLARE pos INT;
    
    -- 先把整个字符串转成小写,避免原字符串大小写混乱
    SET str = LOWER(str);
    SET result = '';
    SET pos = LOCATE(' ', str);
    
    -- 循环拆分并处理每个空格分隔的单词
    WHILE pos > 0 DO
        SET word = CONCAT(UPPER(SUBSTRING(str, 1, 1)), SUBSTRING(str, 2, pos - 1));
        SET result = CONCAT(result, word, ' ');
        SET str = SUBSTRING(str, pos + 1);
        SET pos = LOCATE(' ', str);
    END WHILE;
    
    -- 处理最后一个没有空格结尾的单词
    SET word = CONCAT(UPPER(SUBSTRING(str, 1, 1)), SUBSTRING(str, 2));
    SET result = CONCAT(result, word);
    
    RETURN result;
END //
DELIMITER ;

步骤2:创建INSERT触发器

在插入数据前自动格式化姓名字段:

DELIMITER //
CREATE TRIGGER trg_people_before_insert
BEFORE INSERT ON people
FOR EACH ROW
BEGIN
    SET NEW.Firstname = INITCAP(NEW.Firstname);
    SET NEW.Lastname = INITCAP(NEW.Lastname);
END //
DELIMITER ;

步骤3:创建UPDATE触发器

在更新数据时同样自动格式化姓名字段:

DELIMITER //
CREATE TRIGGER trg_people_before_update
BEFORE UPDATE ON people
FOR EACH ROW
BEGIN
    SET NEW.Firstname = INITCAP(NEW.Firstname);
    SET NEW.Lastname = INITCAP(NEW.Lastname);
END //
DELIMITER ;

测试验证

现在试试效果:

  • 执行插入语句:
INSERT INTO people (Firstname, Lastname) VALUES ('doe', 'john');

插入后表中会得到Firstname='Doe'、Lastname='John'。

  • 执行更新语句:
UPDATE people SET Lastname = 'smith', Firstname= 'jane' WHERE Id_People = 1;

更新后对应的字段会变成Firstname='Jane'、Lastname='Smith'。

  • 测试多单词姓名:
INSERT INTO people (Firstname, Lastname) VALUES ('john paul', 'smith jones');

插入后会得到Firstname='John Paul'、Lastname='Smith Jones',完美处理多单词的首字母大写。


内容的提问来源于stack exchange,提问作者Finalmix6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:49:29