2009-09-17 2 views
8

Я хотел бы извлечь расширение файла из поля в MySQL, которое содержит имена файлов. Это означает, что мне нужно найти окончательный вариант. символ в поле и извлечь все после этого. В следующем примере кода частично работает:Правильное совпадение строк в MySQL

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

за исключением того, что он падает в тех случаях, когда имя файла содержит больше чем один, где он извлекает слишком много «». На большинстве языков программирования я бы ожидал найти функцию, которая дает мне самый правый матч, но я не могу найти такую ​​вещь для MySQL, и не могу найти обсуждения у людей, у которых была такая же проблема, и нашел обходной путь.

+0

Тим, пожалуйста, переместите принятый ответ на последний ответ Мартина. Мой старый ответ функциональный, но явно ошибочный! Благодарю. – mjv

ответ

15

Функция substring_index - она ​​точно выполняет что вы ищете:

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

Редактировать: ответ
знакомства Мартина, используя substring_index() с отрицательным параметром счета является гораздо более эффективным подходом!
Я ниспровергаю себя (на самом деле это невозможно ...), поддержав ответ Мартина; «Хотелось бы, чтобы я мог передать принятый ему ответ ... Может быть, OP это сделает.


Оригинальный ответ:
Следующее может сделать трюк (АТН:. Длина может быть от 1, могут также хотят иметь дело с случае значения имени файла без точечного характера

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

Помните, однако, что этот тип постфакту синтаксического анализа может быть довольно дорогим (чтение выполняется медленно), и вы можете рассмотреть возможность расширения расширения файла на отдельный столбец во время загрузки.

Смежные вопросы