MySQL 将文本列中的值移动到新的 INT 列

标签 mysql sql mybb

所以,我想改进MyBB的shoutbox插件,并在pMA中执行以下操作。

私有(private)喊话存储为 TEXT/VARCHAR:"/pvt userid message"。我想要实现的是:

  • 将 userid 中的值移至新的 INT 列touid
  • 删除/pvt id前缀

之前的代码使用sscanf($message, "/pvt %d", $userID)。 查询类似于 UPDATE 喊 SET touid=???, message=??? WHERE 消息如“/pvt %”

@edit:示例:

/pvt 55 Hello World - 这是私有(private)呼喊!

/pvt 675 又一个下午。

这不是私有(private)喊叫

最佳答案

第一部分并不难:

update shouts
    set touid = substring_index(message, '/pvt ', -1) + 0
    where message LIKE '/pvt %';

这会在 '/pvt ' 上分割字符串,获取第二部分并将其转换为整数。 MySQL 进行静默转换,因此它会转换前导数字。

另一种方法利用了模式位于开头的事实:

update shouts
    set touid = substr(message, 6, 1000) + 0
    where message LIKE '/pvt %';

您可以通过将其替换为任何内容来删除字符串的这一部分:

update shouts
    set touid = substring_index(message, '/pvt ', -1) + 0
        message = replace(message,
                          concat('/pvt ', substring_index(message, '/pvt ', -1) + 0),
                          '')
    where message LIKE '/pvt %';

关于MySQL 将文本列中的值移动到新的 INT 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716836/

相关文章:

mysql - 如何将 UCS-2 Little Endian 编码的文件上传到 UTF-8 格式的 Mysql 表中

mysql - #1366 - 不正确的整数值 : 'NULL' for column 'cid' at row 1

php - 尝试查看 MySQL 表时出现 500 错误

mysql - if语句在sql查询中确实有效

javascript - 用json显示数据库记录

mysql - 进程列表中的状态 "Waiting for table flush"

c# - Fluent Nhibernate - 通过分组连接查询

php - 包含特殊数字格式的字符串列的 AUTO_INCRMENT 实现

sql - TSQL : Is there a faster or better way to encrypt values?

php - 在数据库服务器上存储大量表