我需要一个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