我对MySql(或一般的SQL)知之甚少,对于noobness抱歉。
我试图以这种方式更新一堆String条目:
让我们说有这个:
commands.firm.pm.Stuff
我想将其转换为:
commands.firm.pm.print.Stuff
意思是,在下午之后添加 .print ,之前是#34; Stuff" (其中Stuff可以是任何字母数字字符串)。
如何使用MySql查询执行此操作?我确定必须使用REGEXP,但我不确定如何去做。
由于
答案 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 '%.%'