Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 SQL更新-更改字符串_Mysql_Sql - Fatal编程技术网

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_';