MySQL中最右边出现的字符串匹配

时间:2009-09-17 13:52:58

标签: mysql string

我想从MySQL中包含文件名的字段中提取文件扩展名。这意味着我需要找到最终的'。'该字段中的字符,然后提取所有内容。以下代码示例部分有效:

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

除了在文件名包含多个'。'的情况下,它会被删除,因为它提取太多。在大多数编程语言中,我希望找到一个能让我最合适的函数,但是我找不到MySQL的任何这样的东西,我也找不到那些遇到同样问题并找到解决方法的人的讨论。

2 个答案:

答案 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;

请注意,这种类型的事后解析可能非常昂贵(读取速度慢),您可以考虑在加载时将文件扩展名解压缩到单独的列中。