SQL-запрос для удаления определенного текста из каждого поля в определенном столбце?

Недавно я перекодировал один из моих сайтов, а структура базы данных немного отличается.

Я пытаюсь преобразовать следующее:

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

В следующем:

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

Я знаю, что я мог бы сделать цикл foreach с PHP и взорвать расширение файла до конца и обновлять каждую строку таким образом, но это похоже на слишком много запросов для этой задачи.

Есть ли какой-либо SQL-запрос, который я мог бы запустить, что позволило бы мне удалить exitision файла из каждого поля в столбце file_name?

Ответ 1

Вы можете использовать функцию REPLACE() в собственном MySQL для простой замены строки.

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

Ответ 2

Это должно работать:

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

Ответ 3

Это будет отключать окончательное расширение, если оно есть, от file_name при каждом запуске. Это агностически относительно расширения (так что вы можете иметь ".foo" в какой-то день) и не повредит записи без продолжения.

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