Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como formatar números no SQL Server


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