Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询以从特定列中的每个字段中删除某些文本?_Mysql - Fatal编程技术网

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多次运行此更新(例如,作为修复当天记录的夜间作业),它将切掉部分已经修剪过的文件名。