我想从MySQL中包含文件名的字段中提取文件扩展名。这意味着我需要找到最终的'。'该字段中的字符,然后提取所有内容。以下代码示例部分有效:
SELECT LCASE(RIGHT(filename, LENGTH(filename) - LOCATE('.', filename)))
FROM mytable;
除了在文件名包含多个'。'的情况下,它会被删除,因为它提取太多。在大多数编程语言中,我希望找到一个能让我最合适的函数,但是我找不到MySQL的任何这样的东西,我也找不到那些遇到同样问题并找到解决方法的人的讨论。
答案 0 :(得分:16)
有substring_index功能 - 它完全符合您的要求:
SELECT substring_index(filename, '.', -1) FROM mytable
答案 1 :(得分:2)
修改强>:
请参阅Martin的答案,使用substring_index()
,使用负计数参数是一种更好的方法!
我贬低自己(实际上这是不可能的......),赞同马丁的回答; “希望我能把接受的答案传递给他......也许OP会这样做。
原始答案:
以下可以做到这一点(ATN:长度可能会被1关闭,也可能想要处理没有点字符的文件名值的情况。
SELECT LCASE(RIGHT(filename, LOCATE('.', REVERSE(filename) ) ))
FROM mytable;
请注意,这种类型的事后解析可能非常昂贵(读取速度慢),您可以考虑在加载时将文件扩展名解压缩到单独的列中。