更新现有列数据MySQL
我在MySQL数据库中有一个带有更新现有列数据MySQL,mysql,sql,database,sql-update,Mysql,Sql,Database,Sql Update,我在MySQL数据库中有一个带有speed列的表 速度 我正在尝试更新此列以从此列中删除Mbits部分 我可以有一个可以执行此任务的就地查询吗 我在谷歌上搜索了一下,它建议使用split\u str函数,这项任务看起来很复杂 非常感谢您的帮助 问候,, Madan您可以使用replace执行此操作 update mytable set speed = replace(speed, 'Mbits', '') where lower(speed) like '%mbits%' 编辑:速度包含Mbi
speed
列的表
速度
我正在尝试更新此列以从此列中删除Mbits
部分
我可以有一个可以执行此任务的就地查询吗
我在谷歌上搜索了一下,它建议使用split\u str
函数,这项任务看起来很复杂
非常感谢您的帮助
问候,,
Madan您可以使用
replace
执行此操作
update mytable set speed = replace(speed, 'Mbits', '')
where lower(speed) like '%mbits%'
编辑:速度包含Mbits时乘以1000
update mytable set speed = 1000 * cast(replace(speed, 'Mbits', '') as signed)
where lower(speed) like '%mbits%'
可以使用子字符串索引。比如:
UPDATE table
SET speed = SUBSTRING_INDEX(speed,'Mbits', 1);
WHERE speed LIKE '%Mbits%'
使用以下命令:
Update table set speed=LEFT(speed, INSTR(speed, ' ') - 1)
结果将来自:
100 Mbits
120 Mbits
到
并可以选择添加速度为“%Mbits%”的位置。(如果只有部分行有Mbit。)以减少事务大小。请确保@jarlh。。我添加了filter@jarlh最有可能的是,它在mbits
值上没有索引,因此添加过滤器意味着无论如何都要进行一次完整的表扫描,再加上使用LIKE
在文本中进行搜索,我不认为这比replace
更有效。因此,添加过滤器可能会降低速度。;-)@RacilHilan,不管有没有where子句,整个表都将被读取。LIKE可能比replace慢一点,但如果只编辑一小部分行,则写入集的大小将显著减小。(也许MySQL在这里做的事情有所不同???@jarlh是的,我已经说过,整个表将以两种方式读取,所以我们同意这一点。我也同意你的观点,如果只有几条记录会被编辑,那么根据你提到的原因,添加条件是一种方式。但是,我从OP的问题中感觉到,所有记录都有要删除的文本,因此在这种情况下添加条件意味着LIKE
和replace
将执行相同的作业两次,速度较慢。我们不知道OP有哪种情况,因此我将+1您的评论以供参考。或者,speed=REPLACE(speed,'Mbits','')
请解释您的答案。
100 Mbits
120 Mbits
100
120