8

MySQL に printf() のようなフォーマットはありますか?
ドキュメントで簡単な方法を見つけることができませんでした。

たとえば、次のようなものを作成するにはどうすればよいですか。

SELECT STRFORMATFUNCTIONIMLOOKINGFOR("%03d", 17) 

017を取得するには?

4

5 に答える 5

5

あなたの例では、使用できます

LPADを選択(17, 3, '0');

もあります

フォーマットを選択(17, 3); -- 17.000

それ以外の場合は、前述の UDF。

于 2009-03-11T08:17:11.967 に答える
2

FORMAT() 関数を参照してください。

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

ただし、浮動小数点数をフォーマットするためだけです。

于 2009-03-11T08:12:29.810 に答える
2
-- 
-- 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
于 2012-12-05T22:28:59.793 に答える
0

この種の関数は、新しい UDF (ユーザー定義関数) を作成することで実装できます。たとえば、http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html を参照してください

于 2009-03-11T08:08:02.363 に答える