Mysql SQL查询以从特定列中的每个字段中删除某些文本?
我最近重新编码了我的一个站点,数据库结构有点不同 我正在尝试转换以下内容:Mysql SQL查询以从特定列中的每个字段中删除某些文本?,mysql,Mysql,我最近重新编码了我的一个站点,数据库结构有点不同 我正在尝试转换以下内容: *----*----------------------------* | id | file_name | *----*----------------------------* | 1 | 1288044935741310953434.jpg | *----*----------------------------* | 2 | 128804493574131035235
*----*----------------------------*
| id | file_name |
*----*----------------------------*
| 1 | 1288044935741310953434.jpg |
*----*----------------------------*
| 2 | 1288044935741310352357.rar |
*----*----------------------------*
*----*----------------------------*
| id | file_name |
*----*----------------------------*
| 1 | 1288044935741310953434 |
*----*----------------------------*
| 2 | 1288044935741310352357 |
*----*----------------------------*
具体如下:
*----*----------------------------*
| id | file_name |
*----*----------------------------*
| 1 | 1288044935741310953434.jpg |
*----*----------------------------*
| 2 | 1288044935741310352357.rar |
*----*----------------------------*
*----*----------------------------*
| id | file_name |
*----*----------------------------*
| 1 | 1288044935741310953434 |
*----*----------------------------*
| 2 | 1288044935741310352357 |
*----*----------------------------*
我知道我可以用PHP做一个foreach循环,将文件扩展名从末尾分解,然后以这种方式更新每一行,但这似乎太多了
是否有任何SQL查询可以让我从file\u name
列中的每个字段中删除文件例外?您可以在原生MySQL中使用它来进行简单的字符串替换
UPDATE tbl SET file_name = REPLACE(file_name, '.jpg', '');
UPDATE tbl SET file_name = REPLACE(file_name, '.rar', '');
这应该起作用:
UPDATE MyTable
SET file_name = SUBSTRING(file_name,1, CHAR_LENGTH(file_name)-4)
这将在每次运行时从
文件名
中删除最后的扩展名(如果有)。它对扩展是不可知的(所以有一天你可以使用“.foo”),并且不会损害无扩展记录
UPDATE tbl
SET file_name = TRIM(TRAILING CONCAT('.', SUBSTRING_INDEX(file_name, '.', -1) FROM file_name);
您可以使用子字符串索引函数 子字符串索引(str、delim、count) 其中str是字符串,delim是分隔符(您希望在其左边或右边有一个子字符串),count指定哪个分隔符(如果该分隔符在字符串中多次出现) 例如:
UPDATE table SET file_name = SUBSTRING_INDEX(file_name , '.' , 1);
+如果有一天他的数据包含多个扩展名,OP应该小心。
some.ravel.animal.jpg
-->some.animel
carefull;)@埃德温斯特勒真的!WHERE子句可以防止这种情况,可能是使用REGEXP
来匹配已知模式,或者使用子字符串操作与WHERE
子句一起删除扩展。右:)但是如果OP多次运行此更新(例如,作为修复当天记录的夜间作业),它将切掉部分已经修剪过的文件名。