Отримуємо частину тексту по індексу

Корисна користувальницька функція MySQL для отримання частини тексту (не більше 255 символів), де є роздільники (крапка, кома і т.д.)
DROP FUNCTION IF EXISTS `f_getel`;
DELIMITER //
CREATE FUNCTION `f_getel`(`str` VARCHAR(1000), `separator_par` VARCHAR(5), `num` INT) RETURNS char(255) CHARSET utf8
    COMMENT 'Повертає заданий елемент NUM в рядку STR, в якому всі елементи розділені із допомогою SEPARATOR_PAR'
BEGIN
declare long_str varchar(1000);
declare short_str varchar(1000);
declare exit handler for not found, sqlwarning, sqlexception return 0;

set long_str = (SUBSTRING_INDEX(str,separator_par,num))
 ,short_str = case
      when num > 0
       then (SUBSTRING_INDEX(str,separator_par,num - 1))
       else (SUBSTRING_INDEX(str,separator_par,num + 1))
      end;

-- Видаляється роздільник зліва або справа в залежності від num > 0 чи ні
return replace(long_str,case
          when (num > 0) and (long_str != short_str)
           then concat(ifnull(short_str,0),separator_par)
          when (num <= 0) and (long_str != short_str)
           then concat(separator_par,ifnull(short_str,0))
          else short_str
         end
           ,'');

END//
DELIMITER ;

-- Приклад використання:
select f_getel('66.249.76.175','.',1) as r;
-- повертає цифру 66

select f_getel('66.249.76.175','.',-1) as r;
-- повертає цифру 175
Якщо ви знайшли помилку, прохання - виділіть текст помилки (максимум 127 символів) і натисніть Ctrl+Enter.