MySql:使用列';s内容加上其他内容

MySql:使用列';s内容加上其他内容,mysql,regex,sql-update,Mysql,Regex,Sql Update,很抱歉,我对MySql(或一般的SQL)没有太多的了解,所以很抱歉我没有 我试图以这种方式更新一组字符串条目: 我们可以这样说: commands.firm.pm.Stuff 我想把它转换成: commands.firm.pm.print.Stuff 也就是说,在pm之后,在“Stuff”(Stuff可以是任何字母数字字符串)之前添加.print 我如何使用MySql查询来实现这一点?我肯定必须使用REGEXP,但我不知道如何使用它 谢谢也许可以使用stru替换将commands.firm.

很抱歉,我对MySql(或一般的SQL)没有太多的了解,所以很抱歉我没有

我试图以这种方式更新一组字符串条目:

我们可以这样说:

commands.firm.pm.Stuff
我想把它转换成:

commands.firm.pm.print.Stuff
也就是说,在pm之后,在“Stuff”(Stuff可以是任何字母数字字符串)之前添加.print

我如何使用MySql查询来实现这一点?我肯定必须使用REGEXP,但我不知道如何使用它


谢谢

也许可以使用stru替换将
commands.firm.pm
替换为
commands.firm.pm.print

$original_str = "commands.firm.pm.15hhkl15k0fak1";
str_replace("commands.firm.pm", "commands.firm.pm.print", $original_str);
应输出:
commands.firm.pm.print.15hhkl15k0fak1


然后用新值更新表…如何在一个查询中完成所有操作(获取列值并进行更新),我不知道。我所能想到的就是在一个查询中获取列值,进行上面的替换,然后在第二个查询中使用新值更新列。

尝试类似的操作。它将查找最后一个句点并在其中插入字符串:

select insert(s, length(s) - instr(reverse(s), '.') + 1, 0, '.print')
from (
    select 'commands.firm.pm.Stuff' as s
) a
要更新:

update MyTable
set MyColumn = insert(MyColumn, length(MyColumn) - instr(reverse(MyColumn), '.') + 1, 0, '.print')
where MyColumn like 'commands.firm.pm.%'

要更新以“
”结尾的行,请仅更新“
”:

UPDATE TableX
SET Column = CONCAT( LEFT( CHAR_LENGTH(Column) - CHAR_LENGTH('.Stuff') )
                   , '.print'
                   , '.Stuff'
                   )
WHERE Column LIKE '%.Stuff'

要更新所有行,请在最后一个点之前添加
.print

UPDATE TableX
SET Column = CONCAT( LEFT( CHAR_LENGTH(Column) 
                           - CHAR_LENGTH(SUBSTRING_INDEX(Column, '.', -1))
                         )
                   , 'print.'
                   , SUBSTRING_INDEX(Column, '.', -1)
                   )
WHERE Column LIKE '%.%'

“where Stuff可以是任何字母数字字符串”这几乎可以用,但问题是,就像我说的,Stuff是任何字母数字字符串,所以它不被称为“Stuff”。我得弄清楚是什么东西。我只知道它是最后一个“.”字符后面的字符串。你可以使用第二个版本。或者使用
Insert()
的RedFilter更好的版本。请看是的,
Insert()
比这里的CONCAT好。等等,快速提问,这有什么作用?它只是选择还是实际更新数据库?这只是一个选择,作为如何转换数据的示例。有关更新示例,请参见我的编辑。