我的表是这样的:SQL更新 - 更改字符串
Users(id,name)
我需要一个查询,以查找姓名的开始与“asdf_”,除去所这个前缀更新所有行。
例如:
查询之前,该表包含:
asdf_john
asdf_jane
查询后,我想:
john
jane
感谢您的帮助
我的表是这样的:SQL更新 - 更改字符串
Users(id,name)
我需要一个查询,以查找姓名的开始与“asdf_”,除去所这个前缀更新所有行。
例如:
查询之前,该表包含:
asdf_john
asdf_jane
查询后,我想:
john
jane
感谢您的帮助
,你可以使用SQL函数是字符串:SUBSTR(例如:http://www.1keydata.com/sql/sql-substring.html)
对于你的表USERS:
UPDATE USERS SET NAME = SUBSTRING (NAME, 6) WHERE NAME LIKE 'asdf_%';
UPDATE `Users` SET `name` = replace(`name`, 'asdf_', '') WHERE `name` LIKE 'asdf\_%' ESCAPE '\';
添加了WHERE
子句基于@ UltraCommit的答案,所以它会在开始时找到字符串时进行替换。
或者基于在@ McPepper的回答是:
UPDATE `Users` SET `name` = SUBSTRING(`name`, 6) WHERE `name` LIKE 'asdf\_%' ESCAPE '\';
如果你想更换,只有当该字符串的开头。将数字6
替换为您要替换的字符串的字符数+ 1
。 在这种情况下,您的字符串asdf_
是5
字符长,+1
变得6
。这是数据库将开始保存字符串的字符位置。
这仍然是错误的。如果在开头*和*在中间找到该短语会怎么样? – 2011-06-15 15:27:40
@UltraCommit:尽量不要采取行动,以便惊讶;) – 2011-06-15 15:34:06
Update Users
set name = trim(leading 'asdf_' from name)
where name like 'asdf_%'
在Oracle PL/SQL,下划线意味着一个快乐的性格,所以你会替换字符串与asdf1,asdf2,asdf3,......,asdfZ并开始等等。 – UltraCommit 2011-06-15 15:19:21
@UltraCommit:这很好,但问题是标签为'mysql'。 – 2011-06-15 15:26:54
但是,也是一般用SQL和QUERY标记,所以如果我声明IN ORACLE PL/SQL环境有不同的效果,我没有错。 – UltraCommit 2011-06-15 15:28:22
这应该通过删除启动 “asdf_” 只工作以“asdf_”开头的所有名称
UPDATE `Users`
SET `name` = SUBSTRING(`name`, 6)
WHERE `name` REGEXP '^asdf_';
+1唯一正确的答案。 – 2011-06-15 15:28:04
这是不完全正确,因为替换字符串可以具有可变长度 – manji 2011-06-15 15:44:56
@Manji(例如,如果作为参数传递给函数):确定,但比你可以使用函数长度来解决字符串的长度,以取代 – McPepper 2011-06-15 15:49:55