Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新现有列数据MySQL_Mysql_Sql_Database_Sql Update - Fatal编程技术网

更新现有列数据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

我在MySQL数据库中有一个带有
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