2011-05-26 84 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" 
相关问题