【问题标题】:add integer from string consisted of character and integer having the same character从由字符和具有相同字符的整数组成的字符串中添加整数
【发布时间】:2018-08-09 20:24:19
【问题描述】:

我有这个 mysql 表。

name   |  column
bob11  |  value
bob22  |  value
red12  |  value
bam22  |  value

我想做的是添加数字 11 和 22,因为名称 bob 是一样的。我想以这种方式与其他名称一起输出。

name   |  column
bob33  |  value
red12  |  value
bam22  |  value

我已经知道如何通过此代码获取具有相同值的列。

"SELECT name, COUNT(*) as count FROM table GROUP BY name HAVING COUNT(*) > 1"

但我不知道如何进行操作。任何想法将不胜感激。谢谢

【问题讨论】:

  • 我认为您不能仅在 SQL 中做到这一点。您可以在 PHP 中去除整数和名称,添加整数,然后附加回名称。
  • 学习substr 命令。抱歉,您的查询有点笼统,这是我能给您的最好的了
  • 这就是为什么我们应该使用 1NF (en.wikipedia.org/wiki/Database_normalization#Normal_forms)

标签: php mysql


【解决方案1】:

如果数字前的部分总是3个字符,可以用LEFT()SUBSTR()提取前缀和数字,然后用CONCAT()SUM()组合起来。

SELECT CONCAT(LEFT(name, 3), SUM(SUBSTR(name, 4))) AS name, `column`
FROM yourTable
GROUP BY LEFT(name, 3);

DEMO

如果没有,您需要编写一个返回数字后缀位置的函数,并使用它来代替硬编码3

SELECT CONCAT(LEFT(name, number_pos(name)-1), SUM(SUBSTR(name, number_pos(name)))) AS name, `column`
FROM yourTable
GROUP BY LEFT(name, number_pos(name)-1)

请参阅Finding number position in string 了解查找号码位置的方法。

【讨论】:

  • 不,不是,只是用了上面的名字。
  • 我已经更新了答案,说明如何使用可变长度前缀。
猜你喜欢
  • 2015-09-08
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
相关资源
最近更新 更多