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

时间:2015-04-18 11:42:28

标签: mysql sql mybb

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

私人喊叫存储为TEXT / VARCHAR:"/pvt userid message"。我想要达到的目的是:

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

之前的代码使用sscanf($message, "/pvt %d", $userID)。 查询类似于UPDATE shouts SET touid=???, message=??? WHERE message LIKE '/pvt %'

@edit:示例:

/pvt 55 Hello world - this is a private shout!

/pvt 675 Another pm.

This is not a private shout

1 个答案:

答案 0 :(得分:0)

第一部分并不那么难:

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 %';