如何用SQL将WordPress的display_name拆分写入user_meta的first_name和last_name
前置注意事项
- 操作前必须先备份
wp_users和wp_usermeta表,避免数据异常无法恢复 - 以下SQL默认使用WordPress默认表前缀
wp_,如果你的站点自定义了表前缀,请将SQL中的wp_替换为实际前缀 - 拆分规则说明:
- 中文姓名默认按「首字为姓,剩余为名字」拆分,复姓场景可自行调整字符截取长度
- 英文姓名默认按「第一个空格前为名,空格后为姓」拆分,无空格的英文姓名不会写入姓氏数据
场景1:中文姓名拆分写入
-- 写入姓氏(last_name) INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT ID AS user_id, 'last_name' AS meta_key, LEFT(display_name, 1) AS meta_value FROM wp_users ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value); -- 写入名字(first_name) INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT ID AS user_id, 'first_name' AS meta_key, SUBSTRING(display_name, 2) AS meta_value FROM wp_users ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
如果是复姓,将上述SQL中LEFT(display_name, 1)的1改为2,SUBSTRING(display_name, 2)的2改为3即可。
场景2:英文姓名(空格分隔)拆分写入
-- 写入名字(first_name) INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT ID AS user_id, 'first_name' AS meta_key, SUBSTRING_INDEX(display_name, ' ', 1) AS meta_value FROM wp_users ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value); -- 写入姓氏(last_name) INSERT INTO wp_usermeta (user_id, meta_key, meta_value) SELECT ID AS user_id, 'last_name' AS meta_key, SUBSTRING(display_name, LOCATE(' ', display_name) + 1) AS meta_value FROM wp_users WHERE LOCATE(' ', display_name) > 0 ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
结果验证
执行完成后可运行以下SQL抽查拆分结果是否符合预期:
SELECT u.ID, u.display_name, um1.meta_value AS first_name, um2.meta_value AS last_name FROM wp_users u LEFT JOIN wp_usermeta um1 ON u.ID = um1.user_id AND um1.meta_key = 'first_name' LEFT JOIN wp_usermeta um2 ON u.ID = um2.user_id AND um2.meta_key = 'last_name' LIMIT 20;
内容的提问来源于stack exchange,提问作者Jamie Warren
相关产品推荐
相关产品推荐

