MySql:使用列';s内容加上其他内容
很抱歉,我对MySql(或一般的SQL)没有太多的了解,所以很抱歉我没有 我试图以这种方式更新一组字符串条目: 我们可以这样说: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.
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好。等等,快速提问,这有什么作用?它只是选择还是实际更新数据库?这只是一个选择,作为如何转换数据的示例。有关更新示例,请参见我的编辑。