Дополнение строки до заданной длины с обоих краев в MySQL
Функция STRING_PAD_BOTH()
В MySQL нет отдельной функции для данной задачи. Однако ее можно создать самостоятельно.
Исходный код
DROP FUNCTION IF EXISTS STRING_PAD_BOTH;
DELIMITER $$
CREATE FUNCTION STRING_PAD_BOTH(string TEXT, padLength INT, padString TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE result TEXT DEFAULT NULL;
IF (padLength = 0) THEN SET result = '';
ELSEIF (padLength > 0) THEN
BEGIN
DECLARE padLengthDiff INT DEFAULT 0;
SET padLengthDiff = padLength - CHAR_LENGTH(string);
IF (padLengthDiff = 0) THEN SET result = string;
ELSEIF (padLengthDiff > 0) THEN
BEGIN
DECLARE padLengthLeft INT DEFAULT 0;
DECLARE padLengthRight INT DEFAULT 0;
DECLARE padStringLength INT DEFAULT 0;
SET padLengthLeft = FLOOR(padLengthDiff / 2);
SET padLengthRight = padLengthDiff - padLengthLeft;
SET padStringLength = CHAR_LENGTH(padString);
SET result = CONCAT(
SUBSTRING(REPEAT(padString, CEIL(padLengthLeft / padStringLength)), 1, padLengthLeft),
string,
SUBSTRING(REPEAT(padString, CEIL(padLengthRight / padStringLength)), 1, padLengthRight)
);
END;
ELSE SET result = SUBSTRING(string, 1, padLength);
END IF;
END;
END IF;
RETURN result;
END$$
DELIMITER ;
Аргументы
- string — дополняемая строка;
- padLength — нужная длина строки;
- padString — строка дополнения.
Возвращаемое значение
Возвращает строку string, дополненную до длины padLength с обоих краев.
Особенности
- Безопасна для многобайтных строк.
- Если padLength равен нулю, то строка string будет обрезана до нулевой длины, т.е. будет возвращена пустая строка.
- Если padLength меньше нуля, то будет возвращен NULL.
- Если padLength меньше длины строки string, то строка string будет обрезана с правого края до длины padLength.
- Важно помнить, что при вычислении левого и правого дополнений строки в приоритете правый край. Т.е. если нужно увеличить строку на 3 символа, то к правому краю добавиться 2 символа, а к левому — 1.