Обрезание строки до заданной длины с обоих краев в MySQL

Функция STRING_TRUNCATE_BOTH()

В MySQL нет отдельной функции для данной задачи. Однако ее можно создать самостоятельно.

Исходный код

DROP FUNCTION IF EXISTS STRING_TRUNCATE_BOTH;

DELIMITER $$

CREATE FUNCTION STRING_TRUNCATE_BOTH(string TEXT, length INT)
RETURNS TEXT
DETERMINISTIC
BEGIN
	DECLARE result TEXT DEFAULT '';
	IF (length > 0) THEN
		BEGIN
			DECLARE truncateLength INT DEFAULT 0;
			SET truncateLength = CHAR_LENGTH(string) - length;
			IF (truncateLength > 0) THEN SET result = SUBSTRING(string, FLOOR(truncateLength / 2) + 1, length);
			ELSE SET result = string;
			END IF;
		END;
	END IF;
	RETURN result;
END$$

DELIMITER ;

Аргументы

  1. string — обрезаемая строка;
  2. length — нужная длина строки.

Возвращаемое значение

Возвращает строку string, обрезанную до длины length с обоих краев.

Особенности

  • Безопасна для многобайтных строк.
  • Важно помнить, что при вычислении обрезаемых подстрок в приоритете правый край. Т.е. если строка обрезается на 3 символа, то с правого края будет срезано 2 символа, а с левого — 1.