我最近记录了我的一个网站,数据库结构有点不同。
我正在尝试转换以下内容:
*----*----------------------------*
| id | file_name |
*----*----------------------------*
| 1 | 1288044935741310953434.jpg |
*----*----------------------------*
| 2 | 1288044935741310352357.rar |
*----*----------------------------*
进入以下内容:
*----*----------------------------*
| id | file_name |
*----*----------------------------*
| 1 | 1288044935741310953434 |
*----*----------------------------*
| 2 | 1288044935741310352357 |
*----*----------------------------*
我知道我可以用PHP做一个foreach循环,并在最后爆炸文件扩展名,并以这种方式更新每一行,但这似乎对任务的查询太多了。
我是否可以运行任何SQL查询,以便从file_name
列的每个字段中删除文件exentision?
答案 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);