2012-01-28 3 views
13

Niedawno przekodowałem jedną z moich stron, a struktura bazy danych jest nieco inna.Zapytanie SQL do usunięcia określonego tekstu z każdego pola w określonej kolumnie?

Próbuję przekonwertować następujący:

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

na następujące:

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

wiem, że mogę zrobić pętlę foreach z PHP i eksplodować rozszerzenie pliku OFF koniec i zaktualizuj każdy wiersz w ten sposób, ale wydaje się, że zbyt wiele zapytań o to zadanie.

Czy istnieje jakiekolwiek zapytanie SQL, które mógłbym uruchomić, które pozwoli mi usunąć plik exentision z każdego pola w kolumnie file_name?

Odpowiedz

37

Możesz użyć the REPLACE() function w macierzystym MySQL, aby wykonać prosty zastępnik ciągu.

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

+1 OP powinien być ostrożny, jeśli jego dane pewnego dnia zawierają wiele rozszerzeń. – pilcrow

+0

O człowieku tak prosty ... piękno – baash05

+2

'some.rare.animal.jpg' ->' somee.animel' carefull;) –

3

To powinno działać:

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

Nie uruchamiaj tej aktualizacji dwa razy ... – pilcrow

+0

@pilcrow nie widzę, jak by to działało aktualizacja dwa razy! –

+1

w prawo :) Ale jeśli OP uruchamia tę aktualizację więcej niż jeden raz (powiedzmy, że jest to codzienna robota, aby naprawić zapisy z tego dnia), odetnie części już przyciętych nazw plików. – pilcrow

0

To będzie rozebrać ostateczną rozszerzenie, jeśli w ogóle, od file_name każdym razem, gdy jest uruchamiany. Jest agnostyczny w odniesieniu do rozszerzenia (możesz więc mieć ".foo" pewnego dnia) i nie zaszkodzi bez rozszerzenia rekordów.

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