O SQL Server nos fornece uma maneira rápida e fácil de formatar números com vírgulas inseridas no local relevante. Por exemplo, 1234,56 pode se tornar 1.234,56 . Ou pode se tornar 1.234,56 , se essa for a localidade que você está usando.
Exemplo
Podemos usar o
FORMAT()
função para formatar números com vírgulas. Quando usamos esta função, passamos o número e uma string de formato. A string de formato determina como o número será formatado quando retornado. O
FORMAT()
A função retorna uma representação de string formatada do número, com base nos valores que fornecemos. Segue um exemplo para demonstrar:
SELECT
FORMAT(123456.789, 'N') AS "Number",
FORMAT(123456.789, 'P') AS "Percent",
FORMAT(123456.789, 'C') AS "Currency";
Resultado:
+------------+----------------+-------------+ | Number | Percent | Currency | |------------+----------------+-------------| | 123,456.79 | 12,345,678.90% | $123,456.79 | +------------+----------------+-------------+
Este exemplo demonstra três das strings de formato numérico padrão:
- Se quisermos apenas o número formatado, podemos usar
N
- Se quisermos formatar como porcentagem, podemos usar
P
- Para moeda, podemos usar
C
.
O SQL Server é inteligente o suficiente para conhecer sua localidade atual (com base no idioma da sessão atual) e formata o resultado de acordo com as convenções dessa localidade. Isso é importante, porque nem todos vivem em um país que usa uma vírgula como separador de milhares e um ponto final como separador decimal .
Além disso, o
FORMAT()
A função aceita um terceiro argumento opcional de “cultura”, que permite especificar explicitamente a localidade. Aqui está um exemplo do que quero dizer:
SELECT
FORMAT(123456.789, 'N', 'de-de') AS "Number",
FORMAT(123456.789, 'P', 'de-de') AS "Percent",
FORMAT(123456.789, 'C', 'de-de') AS "Currency";
Resultado:
+------------+-----------------+--------------+ | Number | Percent | Currency | |------------+-----------------+--------------| | 123.456,79 | 12.345.678,90 % | 123.456,79 € | +------------+-----------------+--------------+
Neste caso eu especifico
de-de
como a cultura, o que significa que os resultados serão formatados de acordo com as convenções alemãs. Podemos ver que os pontos finais são usados como separador de grupo e uma vírgula é usada para o separador decimal . Se o terceiro argumento for omitido, o idioma da sessão atual será usado.
Strings de formato personalizado
Também é possível usar especificadores de formato personalizados para construir suas próprias strings de formato personalizado. Por exemplo, o
#
caractere é um espaço reservado para dígito, o 0
é um espaço reservado para zero, a vírgula (,
) é um espaço reservado para o separador de grupo e o ponto final (.
) é um espaço reservado para o separador decimal . Isso é verdade independentemente da localidade que está sendo usada – o SQL Server determinará quais caracteres usar para o grupo e os separadores decimais com base na localidade atual.
Exemplo:
SELECT
FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";
Resultado:
+--------------+------------+ | US English | German | |--------------+------------| | 123,456.79 | 123.456,79 | +--------------+------------+
Em ambos os casos, usei a mesma string de formato, mas o SQL Server retornou o grupo e os separadores decimais que eram aplicáveis à localidade especificada (que foi especificada com o terceiro argumento “cultura”).
No exemplo acima, a string de formato inclui mais dígitos do que o número real. Independentemente disso, o SQL Server optou por não retornar nenhum zero à esquerda. Isso porque usamos o
#
especificador de formato. Se quisermos que o SQL Server retorne zeros à esquerda, podemos usar o
0
especificador de formato:SELECT
FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";
Resultado:
+----------------+----------------+ | US English | German | |----------------+----------------| | 000,123,456.79 | 000.123.456,79 | +----------------+----------------+