【问题标题】:Capitalize first letter in all rows MySQL将所有行中的第一个字母大写 MySQL
【发布时间】:2016-01-25 02:16:33
【问题描述】:

我需要运行一个脚本来更新“given_name”列并将所有首字母更改为大写..

我目前有这个代码..没有任何反应..

DROP PROCEDURE IF EXISTS CAPITALIZE;
DELIMITER $$

CREATE PROCEDURE CAPITALIZE()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 1;
SELECT COUNT(*) INTO n FROM users;
-- SET n = (SELECT COUNT(*) FROM users);
SET i=0;
WHILE (i<=n) DO 
  UPDATE users SET given_name = CONCAT( UPPER(SUBSTR(given_name,1,1)), SUBSTR(given_name,2)) WHERE user_id = n;
  UPDATE users SET last_name = CONCAT( UPPER(SUBSTR(last_name,1,1)), SUBSTR(last_name,2)) WHERE user_id = n;

  SET i = (i + 1);
END WHILE;
END $$
DELIMITER ;

【问题讨论】:

标签: mysql stored-procedures


【解决方案1】:

正如@Drew 提到的,您最好只为整个users 表做一个毯子UPDATE 语句:

UPDATE users
SET given_name = CONCAT( UPPER(SUBSTR(given_name,1,1)), LOWER(SUBSTR(given_name,2))),
    last_name = CONCAT( UPPER(SUBSTR(last_name,1,1)), LOWER(SUBSTR(last_name,2)))

要关闭阻止上述查询工作的安全更新模式,请输入:

SET SQL_SAFE_UPDATES = 0;

这是一个演示上述查询的工作小提琴:

SQLFiddle

【讨论】:

  • +Tim Biegeleisen - 你做对了,但是当我运行这个脚本时,它仍然不会影响任何行或没有做任何改变
  • 我的前辈告诉我使用存储过程,你认为我上面的脚本可以工作吗?但是感谢您提供更简单的版本。如果我可以更改主服务器上的设置,我将使用它。
  • @Drew 你能帮我把后面的字母小写吗?例子。数据为:aSDvv.. 必须转换为 Asdvv
  • 如果给定的名字是 TIM DREW 会怎样。
  • 我需要像 Tim Drew 那样为我的英语不好感到抱歉
猜你喜欢
  • 2017-06-20
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2019-08-23
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多