2009-03-11 9 views
8

Existe-t-il une mise en forme similaire à printf() dans MySQL?
Je n'ai pas trouvé de moyen simple dans la documentation.Mise en forme des chaînes sous MySQL

Par exemple, comment puis-je faire quelque chose comme:

SELECT STRFORMATFUNCTIONIMLOOKINGFOR("%03d", 17) 

pour obtenir 017?

Répondre

2

voir FORMAT():

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

mais il est seulement pour le formatage des numéros de flotteur.

5

pour votre exemple, vous pouvez utiliser

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

il y a aussi

SELECT FORMAT (17, 3); - 17.000

sinon, UDF comme mentionné ci-dessus.

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

Peut-être qu'il sera utile:

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