我需要一個MySQL查詢(如果PHP是必需的,您也可以使用它),這將刪除名爲'url'的一列上所有值的結尾。MySQL刪除最後4個字母
問題是我保存了具有.php
的網址,現在我想從數據庫中的所有值中刪除該結尾。
例子:
舊值:
my_url.php
my_sadas.php
新的價值觀:
my_url
my_sadas
我需要一個MySQL查詢(如果PHP是必需的,您也可以使用它),這將刪除名爲'url'的一列上所有值的結尾。MySQL刪除最後4個字母
問題是我保存了具有.php
的網址,現在我想從數據庫中的所有值中刪除該結尾。
例子:
舊值:
my_url.php
my_sadas.php
新的價值觀:
my_url
my_sadas
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' ;
UPDATE files
SET fileName = SUBSTRING(fileName, 1 , (LENGTH(fileName) - 4)) ;
對於您可能有雙字節字符的情況,您可能需要使用CHAR_LENGTH
而不是LENGTH
和LEFT
而不是SUBSTRING
。
將此項與希望僅刪除字符(如果它們是.php
,CASE
或WHERE
子句)結合使用。
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
SUBSTRING_INDEX更容易使用,對於這種情況。
UPDATE mytable
SET
mytable.url = SUBSTRING_INDEX(mytable.url, '.php', 1)
WHERE
mytable.url LIKE "%.php"
使用'SUNSTRING()'和'長度()'功能:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html – 2011-05-26 12:52:34
@ypercube:你的意思' SUBSTRING()'對嗎? – 2011-05-26 12:53:36
@哈利:是的,當然:) – 2011-05-26 12:55:21