2014-02-08 41 views
2

我的數據庫中有大量圖像。用sql替換零件只有

圖片現在都是jpg。

他們曾經是JPG和PNG,所以我在我的數據庫中保存了擴展名。

現在我想刪除所有的擴展,所以一切後面的點(包括點)。

這是可能的與sql。

我想我應該用這樣的:

update Where row like '%.jpg' or '%.JPG' or '%.png' or '%.PNG' set value row .. 

,但我不能找到任何東西。這是可能的與SQL?

我知道我可以用php做到爆炸,然後只是回聲部分[0],但我想改變它在我的數據庫,所以everyting看起來很整潔。

+0

您正在使用什麼數據庫?答案是肯定的,但細節取決於數據庫 –

+0

我不知道你的意思是數據庫的名稱?我連接mysql工作臺。 –

+1

如果您有很多記錄,我會在執行此操作之前備份數據庫。如果你執行連接並且代碼不能完成你期望的操作。 – MrVimes

回答

2

是的,這是可能的。語法是:

update <table> 
    set value = substring_index(row, '.', 1) 
    Where row like '%.jpg' or row like '%.JPG' or row like '%.png' or row like '%.PNG' 

這裏假設名稱中只有一個'.'

編輯:

如果.可以在名稱中出現不止一次,你可以使用這一招:

update <table> 
    set value = substring_index(row, '.', 
           length(row) - length(replace(row, '.', '')) 
           ) 
    Where row like '%.jpg' or row like '%.JPG' or row like '%.png' or row like '%.PNG' 

表達length(row) - length(replace(row, '.', '')計數的行中的週期數。

您也可以表達where爲:

where substring_index(row, '.', -1) in ('jpg', 'JPG', 'png', 'PNG') 
+0

它只在第一次運行後將第一個或語句更改爲png或語句,並且它完美運行 –

+0

@SvenB。 。 。你可以用'or'來完成,你只需要重複每一個''''比較。我首先錯過了這個語法問題。 –