我的表是這樣的: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