Самое правое совпадение строк в MySQL - PullRequest
9 голосов
/ 17 сентября 2009

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

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

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

Ответы [ 2 ]

16 голосов
/ 13 сентября 2012

Есть функция substring_index - она ​​делает именно то, что вы ищете:

SELECT substring_index(filename, '.', -1) FROM mytable
2 голосов
/ 17 сентября 2009

Редактировать
Смотрите ответ Мартина, используя substring_index(), с отрицательным параметром счета - НАМНОГО лучший подход!
Я сам себя опровергаю (на самом деле это невозможно ...), я голосую против ответа Мартина; «Хотел бы я передать ему принятый ответ ... Может быть, это сделает ОП».


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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...