Mysql SQL更新-更改字符串
我有这样的桌子:Mysql SQL更新-更改字符串,mysql,sql,Mysql,Sql,我有这样的桌子: Users(id,name) 我需要一个查询来查找名称以“asdf_”开头,并通过删除此前缀来更新所有行 例如: 查询前,该表包含: asdf_john asdf_jane 查询后,我想: john jane 谢谢你的帮助 UPDATE `Users` SET `name` = replace(`name`, 'asdf_', '') WHERE `name` LIKE 'asdf\_%' ESCAPE '\'; 根据@UltraCommit的答案添加了WHERE子句,
Users(id,name)
我需要一个查询来查找名称以“asdf_”开头,并通过删除此前缀来更新所有行
例如:
查询前,该表包含:
asdf_john
asdf_jane
查询后,我想:
john
jane
谢谢你的帮助
UPDATE `Users` SET `name` = replace(`name`, 'asdf_', '') WHERE `name` LIKE 'asdf\_%' ESCAPE '\';
根据@UltraCommit的答案添加了WHERE
子句,因此当它在开始处找到字符串时,它将进行替换
或者根据@McPepper的回答:
UPDATE `Users` SET `name` = SUBSTRING(`name`, 6) WHERE `name` LIKE 'asdf\_%' ESCAPE '\';
如果只希望在字符串位于开头时替换。将数字6
替换为要替换的字符串的字符数+1
。
在这种情况下,字符串
asdf\uuu
的长度为5
个字符,+1
变为6
。这是数据库开始保留字符串的字符位置。可以使用的sql函数是Substring:SUBSTR(示例:)
Update Users
set name = trim(leading 'asdf_' from name)
where name like 'asdf_%'
对于表用户:
UPDATE USERS SET NAME = SUBSTRING (NAME, 6) WHERE NAME LIKE 'asdf_%';
这应该通过仅从所有以“asdf_”开头的名称中删除开头的“asdf_”来实现
在Oracle PL/SQL中,下划线表示单个jolly字符,因此您将替换以asdf1、asdf2、asdf3、…、asdfZ等开头的字符串。@UltraCommit:这很好,但问题被标记为
mysql
。但它也被一般地标记为SQL和QUERY,所以,如果我声明在ORACLE PL/SQL环境中is具有不同的效果,我没有错。@UltraCommit:我没有说您的语句是错误的。但这并不相关。:)这将删除asdf\uu
和asdf\u asdf\u
和asdf\u asdf\u
和。
它仍然是错误的。如果这个短语是在开始和中间找到的呢?这并不完全正确,因为要替换的字符串可以具有可变长度(例如,如果作为参数传递给函数)@Manji:ok,但是您可以使用函数长度来解析要替换的字符串的长度嘿,我有一个问题,我在db中使用了该语法,如:UPDATE urun SET NAME=SUBSTRING(NAME,6)其中名称类似于“chicco%”,但不起作用,错误是:函数admin\u chiln\u db.SUBSTRING不存在。检查参考手册中的“函数名解析和解析”部分
UPDATE `Users`
SET `name` = SUBSTRING(`name`, 6)
WHERE `name` REGEXP '^asdf_';