2012-01-28 19 views
13

Kısa bir süre önce sitelerimden birini kurtardım ve veritabanı yapısı biraz farklı.Belirli bir sütundaki her alandaki belirli metni kaldırmak için SQL sorgusu mu?

aşağıdaki dönüştürmek çalışıyorum: Aşağıdaki içine

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

:

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

ben PHP ile bir foreach döngüsü yapabileceğini biliyoruz ve kapalı dosya uzantısını patlayabilir sonlandırın ve her satırı bu şekilde güncelleyin, ancak bu görev için çok fazla sorgu gibi görünüyor.

O beni file_name sütundaki her alandan dosya exentision kaldırmak için izin verecek çalıştırabilir herhangi bir SQL sorgusu var mı?

cevap

37

Basit bir dize değiştirme yapmak için yerel MySQL the REPLACE() function kullanabilirsiniz.

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

+1 Bir gün içindeki verileri birden çok uzantı içeriyorsa OP dikkat etmelidir. Çok basit – pilcrow

+0

... Oh adam güzellik – baash05

+2

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

3

Bu çalışması gerekir: Varsa

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

Bu UPDATE'yi iki kez çalıştırmayın ... – pilcrow

+0

@pilcrow, güncellemeyi iki kez nasıl çalıştırdığını görmüyor! –

+1

doğru :) Ama eğer OP bu UPDATE'i bir kereden fazla çalıştırıyorsa (o günün kayıtlarını düzeltmek için bir gece mesleği olarak), zaten kesilmiş dosya isimlerinin parçalarını kesecek. – pilcrow

0

Bu file_name itibaren, bu her çalıştırıldığında nihai uzantısını kapalı şerit olacak. Uzantı ile ilgili olarak agnostiktir (böylece bir gün ".foo" olabilir) ve uzantısız kayıtlara zarar vermez.

İlgili konular