SQL查询从特定列中的每个字段中删除某些文本?

时间:2012-01-28 22:41:06

标签: mysql

我最近记录了我的一个网站,数据库结构有点不同。

我正在尝试转换以下内容:

*----*----------------------------*
| id | file_name                  |
*----*----------------------------*    
| 1  | 1288044935741310953434.jpg |
*----*----------------------------*
| 2  | 1288044935741310352357.rar |
*----*----------------------------*

进入以下内容:

*----*----------------------------*
| id | file_name                  |
*----*----------------------------*    
| 1  | 1288044935741310953434     |
*----*----------------------------*
| 2  | 1288044935741310352357     |
*----*----------------------------*

我知道我可以用PHP做一个foreach循环,并在最后爆炸文件扩展名,并以这种方式更新每一行,但这似乎对任务的查询太多了。

我是否可以运行任何SQL查询,以便从file_name列的每个字段中删除文件exentision?

4 个答案:

答案 0 :(得分:41)

您可以在本机MySQL中使用the REPLACE() function来进行简单的字符串替换。

UPDATE tbl SET file_name = REPLACE(file_name, '.jpg', '');
UPDATE tbl SET file_name = REPLACE(file_name, '.rar', '');

答案 1 :(得分:3)

这应该有效:

UPDATE MyTable
SET file_name = SUBSTRING(file_name,1, CHAR_LENGTH(file_name)-4)

答案 2 :(得分:0)

这将在每次运行时从file_name剥离最终扩展名(如果有)。它在扩展方面是不可知的(因此有一天你可以拥有“.foo”)并且不会损害无扩展记录。

UPDATE tbl
   SET file_name =  TRIM(TRAILING CONCAT('.', SUBSTRING_INDEX(file_name, '.', -1) FROM file_name);

答案 3 :(得分:0)

您可以使用 SUBSTRING_INDEX 功能

  

SUBSTRING_INDEX(str,delim,count)

str是字符串,delim是定界符(从中希望在其左侧或右侧创建子字符串),count指定哪个定界符(如果字符串中多次出现定界符)

示例:

UPDATE table SET file_name = SUBSTRING_INDEX(file_name , '.' , 1);