MySql:使用列的内容和其他内容更新列

时间:2012-01-26 15:35:20

标签: mysql regex sql-update

我对MySql(或一般的SQL)知之甚少,对于noobness抱歉。

我试图以这种方式更新一堆String条目:

让我们说有这个:

commands.firm.pm.Stuff

我想将其转换为:

commands.firm.pm.print.Stuff

意思是,在下午之后添加 .print ,之前是#34; Stuff" (其中Stuff可以是任何字母数字字符串)。

如何使用MySql查询执行此操作?我确定必须使用REGEXP,但我不确定如何去做。

由于

3 个答案:

答案 0 :(得分:2)

尝试这样的事情。它找到最后一个句点并在那里插入你的字符串:

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

答案 1 :(得分:0)

也许使用str_replace将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

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

答案 2 :(得分:0)

更新仅以'.Stuff'结尾的行:

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