A partir do SQL Server 2012, você pode formatar tipos numéricos usando o T-SQL
FORMAT()
função. Esta função aceita três argumentos; o número, o formato e um argumento opcional de “cultura”. Ele retorna uma string formatada do tipo nvarchar .
O formato é fornecido como uma string de formato. Uma string de formato define como a saída deve ser formatada.
Aqui está um exemplo:
SELECT FORMAT(1, 'N');
Resultado:
1.00
Neste caso, usei
N
como segundo argumento. Este é o especificador de formato numérico padrão para Number. Este especificador de formato específico (N
) resulta na formatação da saída com dígitos inteiros e decimais, separadores de grupo e um separador decimal com sinal negativo opcional. Este argumento não diferencia maiúsculas de minúsculas, portanto, N
ou n
está bem. Casas decimais
Aqui está outro exemplo, desta vez usando
N1
para especificar que queremos apenas uma casa decimal:SELECT FORMAT(1, 'N1');
Resultado:
1.0
Mas você também pode aumentar o número de casas decimais também:
SELECT FORMAT(1, 'N7');
Resultado:
1.0000000
Nestes exemplos, o
1
e 7
são conhecidos como especificadores de precisão . Os especificadores de precisão são opcionais. Eles podem ser um valor de 0 a 99, que especifica a precisão do resultado. Como funciona depende do especificador de formato que está sendo usado. Para alguns especificadores de formato, especificará o número total de dígitos no resultado, para outros especificará o número de casas decimais. Em outros casos, será completamente ignorado. Consulte a lista completa de especificadores de formato numérico padrão para ver como os especificadores de precisão afetam a saída de cada especificador de formato.
Porcentagem
Os exemplos a seguir usam o
P
argumento, que formata o número como um valor percentual. Ele multiplica o número por 100 e adiciona um sinal de porcentagem localizado. SELECT FORMAT(1, 'P') AS 'Example 1', FORMAT(.375, 'P') AS 'Example 2', FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';
Resultado:
Example 1 Example 2 Example 3 --------- --------- --------- 100.00 % 37.50 % %3,75
Observe que “Exemplo 3” inclui um terceiro argumento, que especifica a cultura a ser usada na saída. Neste caso, eu uso
tr-tr
para turco. Isso resulta no sinal de porcentagem sendo anexado ao número (em vez de anexado, como os outros). Isso também resulta em uma vírgula sendo usada como separador decimal. Se você não fornecer o argumento "cultura", o idioma da sessão atual será usado.
Como você pode imaginar, você pode obter resultados bem diferentes dependendo do seu idioma atual ou do valor de qualquer argumento de “cultura”. Veja Como as configurações de idioma podem afetar seus resultados FORMAT() para mais exemplos.
Moeda
Você pode usar
C
para retornar um valor de moeda. SELECT FORMAT(1, 'C');
Resultado:
$1.00
Você também pode adicionar a localidade como um terceiro parâmetro.
aqui estão alguns exemplos:
SELECT FORMAT(1, 'C', 'fr-FR') AS France, FORMAT(1, 'C', 'th-TH') AS Thailand, FORMAT(1, 'C', 'ja-JP') AS Japan;
Resultado:
France Thailand Japan ------ -------- ----- 1,00 € ฿1.00 ¥1
Exponencial (científico)
Você pode usar
E
para especificar a notação exponencial. SELECT FORMAT(1234.56789, 'E');
Resultado:
1.234568E+003
Hexadecimal
Você pode até mesmo formatar um número como hexadecimal. Para fazer isso, use o
X
argumento:SELECT FORMAT(10, 'X');
Resultado:
A
Hexadecimal é a base 16. Portanto, a contagem vai 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F antes de começar novamente (por exemplo, 10 em hexadecimal é o equivalente de 16 em decimal, e 11 é o equivalente a 17, etc). É por isso que o exemplo aqui resulta em
A
, porque em hexadecimal, A
vem depois de 9
. Aqui está outro exemplo, desta vez com um número maior:
SELECT FORMAT(7145, 'X');
Resultado:
1BE9
Formato personalizado
Você também pode criar seu próprio formato personalizado usando uma string de formato numérico personalizado. Isso consiste em uma série de especificadores de formato numérico personalizados que fornecem um padrão para seu número.
Isso é mais fácil de explicar com um exemplo:
SELECT FORMAT(123456789, '##-###-####');
Resultado:
12-345-6789
Nesse caso, uso o espaço reservado para dígitos (
#
). O espaço reservado para dígitos me permite especificar um formato para o número, usando o #
símbolo como um espaço reservado para cada número. Vírgulas
Outro exemplo:
SELECT FORMAT(123456789, '#,#');
Resultado:
123,456,789
Zeros à esquerda
Outro especificador de formato numérico personalizado é zero (
0
). Você pode usar isso para preencher um número com zeros à esquerda:SELECT FORMAT(7, '000') AS 'Example 1', FORMAT(123, '0000') AS 'Example 2', FORMAT(123, '00000') AS 'Example 3';
Resultado:
Example 1 Example 2 Example 3 --------- --------- --------- 007 0123 00123
Você também pode usá-lo para remover zeros:
SELECT FORMAT(0123, '000') AS 'Example 1', FORMAT(0123, '0000') AS 'Example 2', FORMAT(000123, '00000') AS 'Example 3';
Resultado:
Example 1 Example 2 Example 3 --------- --------- --------- 123 0123 00123
Referência de especificadores de formato numérico
Os artigos a seguir contêm todos os especificadores de formato numérico que você pode usar com o
FORMAT()
função, juntamente com exemplos de T-SQL. - Strings de formato numérico padrão
- Strings de formato numérico personalizado
Esses são os mesmos especificadores de formato suportados pelo .NET Framework (o
FORMAT()
função depende do .NET Framework). Data e hora
O
FORMAT()
A função também permite formatar data e hora. Data e hora tem um conjunto separado de especificadores de formato:
- Strings de formato padrão de data e hora
- Strings de formato personalizado de data e hora