Форматирование строк в MySQL
есть ли printf () - подобное форматирование в MySQL?
Я не смог найти прямой путь в документации.
например, как я могу сделать что-то вроде:
SELECT STRFORMATFUNCTIONIMLOOKINGFOR("%03d", 17)
получить 017 ?
5 ответов
вы можете реализовать эту функцию, создав новый UDF (пользовательская функция).Например. см.http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html
для вашего примера вы можете использовать
выберите LPAD(17, 3, '0');
появилась
выберите (17, 3); -- 17.000
в противном случае UDF, как упоминалось выше.
возможно, это будет полезно:
select lpad(1, 2, '0') str;
+-----+
| str |
+-----+
| 01 |
+-----+
select lpad(11, 2, '0') str;
+-----+
| str |
+-----+
| 11 |
+-----+
см. функцию FORMAT ():
mysql> SELECT FORMAT(12332.123456, 4);
returns '12,332.1235'
но это только для форматирования чисел float.
--
-- Autor: Ivan Sansão.
--
-- Função para formatar strings.
-- Exemplo: select mask("0123456789","(##) ####-####");
-- Retorna: (01) 2345-6789
CREATE FUNCTION mask(texto VARCHAR(255), mascara VARCHAR(255)) RETURNS VARCHAR(255) CHARSET latin1
Begin
-- Contém o texto processado.
DECLARE textoProcessado VARCHAR(255);
SET textoProcessado = "";
-- Se tem Texto.
IF length(texto) > 0 THEN
-- Percorre a máscara enquanto seu tamanho for maior que zero.
WHILE Length(mascara) > 0 DO
-- Se o caracter é um curinga.
IF LEFT(mascara,1) = "#" THEN
-- Concatena o primeiro caracter do texto.
SET textoProcessado = concat(textoProcessado,LEFT(texto,1));
-- Elimina o primeiro caracter da máscara.
SET mascara = SUBSTRING(mascara,2,255);
-- Elimina o primeiro caracter do texto.
SET texto = SUBSTRING(texto,2,255);
ELSE
-- Concatena o primeiro caracter da máscara.
SET textoProcessado = concat(textoProcessado,LEFT(mascara,1));
-- Elimina o primeiro caracter da máscara.
SET mascara = SUBSTRING(mascara,2,255);
END IF;
END WHILE;
END IF;
RETURN trim(textoProcessado);
END