2009-09-17 23 views
8

我想從包含文件名的MySQL字段中提取文件擴展名。這意味着我需要找到最後的'。'然後在該字段中提取所有內容。下面的代碼示例部分作品:MySQL中最右邊的出現字符串匹配

SELECT LCASE(RIGHT(filename, LENGTH(filename) - LOCATE('.', filename))) 
    FROM mytable; 

不同的是它在文件名中包含不止一個倒下的情況下,如果它提取太多「」。在大多數編程語言中,我期望找到一個函數,它能給我一個最右邊的匹配,但是我找不到任何這樣的東西給MySQL,我也不能從那些遇到同樣問題並找到解決方法的人那裏找到任何討論。

+0

提姆,請將接受的答案移到Martin最近的答案。我的舊回答是功能性的,但顯然被誤導了!謝謝。 – mjv

回答

15

substring_index函數 - 它確實你在找什麼:

SELECT substring_index(filename, '.', -1) FROM mytable 
2

編輯
見馬丁的回答,使用substring_index(),具有負計數參數是一個更好的方法!
我倒下了自己(實際上這是不可能的......),提出馬丁的答案; '希望我可以將接受的答案傳給他......也許OP會這樣做。


原來的答覆:
下可以做的伎倆(ATN:長度可以由1被關閉,可能還需要處理的文件名值的情況下,沒有點字符

SELECT LCASE(RIGHT(filename, LOCATE('.', REVERSE(filename)))) 
    FROM mytable; 

但是請注意,這種類型的事後解析可能會非常昂貴(讀取速度很慢),並且您可能會考慮在加載時將文件擴展名提取到單獨的列。