2009-03-11 30 views
8

¿Hay un formato similar a printf() en MySQL?
No pude encontrar una manera directa en la documentación.Formato de cadena en MySQL

Por ejemplo, ¿cómo puedo hacer algo como:

SELECT STRFORMATFUNCTIONIMLOOKINGFOR("%03d", 17) 

para obtener 017?

Respuesta

2

véase el modelo():

mysql> SELECT FORMAT(12332.123456, 4); 
returns '12,332.1235' 

pero es sólo para dar formato a los números de coma flotante.

5

por su ejemplo, podría utilizar

SELECT LPAD (17, 3, '0');

también hay

SELECT FORMAT (17, 3); - 17,000

de lo contrario, UDF como se mencionó anteriormente.

1
-- 
-- Autor: Ivan Sansão. 
-- 
-- Função para formatar strings. 
-- Exemplo: select mask("","(##) ####-####"); 
-- 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 
3

Tal vez será útil:

select lpad(1, 2, '0') str; 
+-----+ 
| str | 
+-----+ 
| 01 | 
+-----+ 
select lpad(11, 2, '0') str; 
+-----+ 
| str | 
+-----+ 
| 11 | 
+-----+