2011-05-26 86 views
4

我需要一個MySQL查詢(如果PHP是必需的,您也可以使用它),這將刪除名爲'url'的一列上所有值的結尾。MySQL刪除最後4個字母

問題是我保存了具有.php的網址,現在我想從數據庫中的所有值中刪除該結尾。

例子:

舊值:

my_url.php 
my_sadas.php 

新的價值觀:

my_url 
my_sadas 
+1

使用'SUNSTRING()'和'長度()'功能:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html – 2011-05-26 12:52:34

+2

@ypercube:你的意思' SUBSTRING()'對嗎? – 2011-05-26 12:53:36

+0

@哈利:是的,當然:) – 2011-05-26 12:55:21

回答

18
UPDATE mytable 
SET myfield = SUBSTRING(myfield, 1, LENGTH(myfield)-4) ; 

如果你還需要檢查該字段是否與'.php'結束截斷之前,你可以添加此條件:

UPDATE mytable 
SET myfield = SUBSTRING(myfield, 1, LENGTH(myfield)-4) 
WHERE RIGHT(myfield, 4) = '.php' ; 

哦,這裏還有LEFT()可以用來代替SUBSTRING()以及

而且CHAR_LENGTH()應該用來代替LENGTH(),因爲它是多字節安全的(雖然LENGTH()是不是):

UPDATE mytable 
SET myfield = LEFT(myfield, CHAR_LENGTH(myfield)-4) 
WHERE RIGHT(myfield, 4) = '.php' ; 
+0

不要使用這個:) – Layke 2011-05-26 12:57:25

+0

子字符位置不是0索引。您需要使用1作爲基點。 – Layke 2011-05-26 13:01:58

4
UPDATE files 
SET fileName = SUBSTRING(fileName, 1 , (LENGTH(fileName) - 4)) ; 
2

對於您可能有雙字節字符的情況,您可能需要使用CHAR_LENGTH 而不是LENGTHLEFT而不是SUBSTRING

將此項與希望僅刪除字符(如果它們是.phpCASEWHERE子句)結合使用。

UPDATE table SET field = CASE WHEN INSTR(field, '.php') > 0 THEN LEFT(field, INSTR(field, '.php')) ELSE field END 

UPDATE table SET field = LEFT(field, INSTR(field, '.php')) WHERE INSTR(field, '.php') > 0 
2

SUBSTRING_INDEX更容易使用,對於這種情況。

UPDATE mytable 
SET 
    mytable.url = SUBSTRING_INDEX(mytable.url, '.php', 1) 
WHERE 
    mytable.url LIKE "%.php" 
相關問題