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

Como formatar números com vírgulas no SQL Server


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 |
+----------------+----------------+