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

Strings de formato numérico padrão compatíveis com FORMAT() no SQL Server


Este artigo fornece uma referência para os especificadores de formato numérico padrão que podem ser usados ​​ao formatar números usando o FORMAT() função no SQL Server. Exemplos incluídos.

Alguns dos exemplos usam especificadores de precisão (estes consistem em um ou dois dígitos anexados ao especificador de formato). Os especificadores de precisão 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.


Formatar string Descrição/Exemplo
C ou c
Moeda . Converte o número em uma string que representa um valor monetário.

Um especificador de precisão opcional pode ser usado para especificar o número de casas decimais.

Exemplos (usando várias culturas) :
SELECT 
  FORMAT(12.34, 'C', 'en-us') R1,
  FORMAT(012.34, 'C', 'iv') R2,
  FORMAT(12.34, 'C0', 'ja-jp') R3,
  FORMAT(12.54, 'c', 'vi-vn') R4,
  FORMAT(12.54, 'c0', 'en-au') R5,
  FORMAT(12.54, 'c4', 'en-gb') R6;
+--------+--------+------+---------+------+----------+
| R1     | R2     | R3   | R4      | R5   | R6       |
|--------+--------+------+---------+------+----------|
| $12.34 | ¤12.34 | ¥12  | 12,54 ₫ | $13  | £12.5400 |
+--------+--------+------+---------+------+----------+
D ou d
Decimal . Converte o número em uma sequência de dígitos decimais (0-9), prefixados por um sinal de menos se o número for negativo. Este formato é suportado apenas para tipos integrais.

Se o especificador de precisão (opcional) for usado, ele especificará o número total de dígitos no resultado. Se o número não tiver tantos dígitos, ele será preenchido com zeros à esquerda.

Exemplos :
SELECT 
  FORMAT(123, 'D') R1,
  FORMAT(123, 'D0') R2,
  FORMAT(123, 'D3') R3,
  FORMAT(123, 'd4') R4,
  FORMAT(0123, 'd5') R5,
  FORMAT(1.23, 'd') R6;
+------+------+------+------+-------+------+
| R1   | R2   | R3   | R4   | R5    | R6   |
|------+------+------+------+-------+------|
| 123  | 123  | 123  | 0123 | 00123 | NULL |
+------+------+------+------+-------+------+
E ou e
Exponencial (científico) . Converte o número em uma string no formato “-d.ddd…E+ddd” ou “-d.ddd…e+ddd”, onde cada “d” indica um dígito (0-9). A string começa com um sinal de menos se o número for negativo. Exatamente um dígito sempre precede o ponto decimal.

Se um especificador de precisão for usado, ele especificará quantos dígitos estão à direita do ponto decimal. Se omitido, seis dígitos aparecerão à direita do ponto decimal.

Exemplos :
SELECT 
  FORMAT(1024.1234567, 'E') R1,
  FORMAT(1024.1234567, 'E0') R2,
  FORMAT(1024.1234567, 'E3') R3,
  FORMAT(1024.1234567, 'e4') R4,
  FORMAT(1024.1234567, 'e7') R5;
+---------------+--------+------------+-------------+----------------+
| R1            | R2     | R3         | R4          | R5             |
|---------------+--------+------------+-------------+----------------|
| 1.024123E+003 | 1E+003 | 1.024E+003 | 1.0241e+003 | 1.0241235e+003 |
+---------------+--------+------------+-------------+----------------+
F ou f
Ponto fixo . Converte o número em uma string no formato “-ddd.ddd…” onde cada “d” indica um dígito (0-9). A string começa com um sinal de menos se o número for negativo.

Um especificador de precisão opcional pode ser usado para especificar o número de casas decimais.

Exemplos :
SELECT 
  FORMAT(12.345, 'F', 'en-us') R1,
  FORMAT(12.345, 'F0', 'en-us') R2,
  FORMAT(12.345, 'f3', 'en-us') R3,
  FORMAT(12.345, 'f4', 'en-us') R4,
  FORMAT(12.345, 'f5', 'en-us') R5,
  FORMAT(12.345, 'f', 'vi-vn') R6;
+-------+------+--------+---------+----------+-------+
| R1    | R2   | R3     | R4      | R5       | R6    |
|-------+------+--------+---------+----------+-------|
| 12.35 | 12   | 12.345 | 12.3450 | 12.34500 | 12,35 |
+-------+------+--------+---------+----------+-------+
G ou g
Geral . Converte o número para o mais compacto de notação de ponto fixo ou científica, dependendo do tipo do número e se um especificador de precisão está presente.

Se o especificador de precisão (opcional) for usado, ele definirá o número máximo de dígitos significativos que podem aparecer na string de resultado. Se omitido ou se o valor for zero, a precisão será determinada pelo tipo de número.

Consulte a documentação oficial do .NET para obter uma explicação de como o tipo de número pode afetar a precisão. Você pode precisar cruzar isso com a documentação oficial para FORMAT() para ver como cada tipo numérico .NET mapeia para um tipo numérico T-SQL.

Exemplos :
SELECT 
  FORMAT(12.345, 'G', 'en-us') R1,
  FORMAT(12.345, 'G0', 'en-us') R2,
  FORMAT(12.345, 'g3', 'en-us') R3,
  FORMAT(12.345, 'g4', 'en-us') R4,
  FORMAT(12.345, 'g5', 'en-us') R5,
  FORMAT(12.345, 'g', 'vi-vn') R6;
+--------+--------+------+-------+--------+--------+
| R1     | R2     | R3   | R4    | R5     | R6     |
|--------+--------+------+-------+--------+--------|
| 12.345 | 12.345 | 12.3 | 12.35 | 12.345 | 12,345 |
+--------+--------+------+-------+--------+--------+
N ou n
Número . Converte o número em uma string no formato “-d,ddd,ddd.ddd…”.

Se o especificador de precisão (opcional) for usado, ele definirá o número de dígitos à direita do ponto decimal.

Exemplos :
SELECT 
  FORMAT(1234.56, 'N', 'en-us') R1,
  FORMAT(1234.56, 'N0', 'en-us') R2,
  FORMAT(1234.56, 'n3', 'en-us') R3,
  FORMAT(1234.56, 'n4', 'en-us') R4,
  FORMAT(1234.56, 'n', 'vi-vn') R5;
+----------+-------+-----------+------------+----------+
| R1       | R2    | R3        | R4         | R5       |
|----------+-------+-----------+------------+----------|
| 1,234.56 | 1,235 | 1,234.560 | 1,234.5600 | 1.234,56 |
+----------+-------+-----------+------------+----------+
P ou p
Porcentagem . Multiplica o número por 100 e o converte em uma string que representa uma porcentagem.

Se o especificador de precisão for usado, ele definirá o número de casas decimais.

Exemplos :
SELECT 
  FORMAT(.1234, 'P', 'en-us') R1,
  FORMAT(.1234, 'P0', 'en-us') R2,
  FORMAT(.1250, 'p0', 'en-us') R3,
  FORMAT(.1250, 'p3', 'en-us') R4,
  FORMAT(.1250, 'p', 'vi-vn') R5;
+---------+------+------+----------+--------+
| R1      | R2   | R3   | R4       | R5     |
|---------+------+------+----------+--------|
| 12.34 % | 12 % | 13 % | 12.500 % | 12,50% |
+---------+------+------+----------+--------+
R ou r
Ida e volta . Tenta garantir que um valor numérico convertido em uma string seja analisado novamente no mesmo valor numérico.

O especificador de precisão é ignorado ao usar esse especificador de formato.

OBSERVAÇÃO :Em .NET, este especificador de formato é suportado apenas pelo Single , Duplo e BigInteger tipos de números. Além disso, para Duplo valores, esse especificador de formato em alguns casos falha ao retornar com êxito o valor original. Ele também oferece baixo desempenho quando usado com o Double e Único tipos.

Além disso, a documentação .NET recomenda que este especificador de formato seja usado para o BigInteger tipo apenas. Ele recomenda que Duplo tipos usam G17 , e Único tipos usam G9 .

O que isso significa para o SQL Server? Basicamente, você provavelmente deve evitar esse especificador de formato no SQL Server. Em vez disso, use G17 para o flutuador tipo de dados e G9 para o real tipo de dados.

Exemplos
Aqui está um exemplo que compara o R especificador de formato com G17 e G9 .
DECLARE @myFloat float, @myReal real;
SET @myFloat = '123456789.1234567';
SET @myReal = @myFloat;
SELECT 
  @myFloat 'Float Value', 
  @myReal 'Real Value';
SELECT 
  FORMAT(@myFloat, 'R') 'Float R',
  FORMAT(@myFloat, 'G17') 'Float G17',
  FORMAT(@myReal, 'R') 'Real R',
  FORMAT(@myReal, 'G9') 'Real G9';
+------------------+--------------+
| Float Value      | Real Value   |
|------------------+--------------|
| 123456789.123457 | 1.234568E+08 |
+------------------+--------------+
(1 row affected)
+-------------------+-------------------+-----------+-----------+
| Float R           | Float G17         | Real R    | Real G9   |
|-------------------+-------------------+-----------+-----------|
| 123456789.1234567 | 123456789.1234567 | 123456792 | 123456792 |
+-------------------+-------------------+-----------+-----------+
(1 row affected)
X ou x
Hexadecimal . Converte o número em uma string de dígitos hexadecimais.

O caso usado (ou seja, X ou x ) especifica se devem ser usados ​​caracteres maiúsculos ou minúsculos para dígitos hexadecimais maiores que 9. Isso ocorre porque os valores hexadecimais podem consistir nos seguintes caracteres; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e e f (qualquer caso). Maiúsculas e minúsculas representam o mesmo valor ao usar hexadecimal (por exemplo, f e F ambos convertem para 15 em decimal).

Este especificador de formato tem suporte apenas para tipos integrais.

Se o especificador de precisão (opcional) for usado, ele especificará o número total de dígitos no resultado. Se o número não tiver tantos dígitos, ele será preenchido com zeros à esquerda.

Exemplos :
SELECT 
  FORMAT(123, 'X') R1,
  FORMAT(123, 'x') R2,
  FORMAT(123, 'x6') R3,
  FORMAT(12345678, 'x') R4,
  FORMAT(123, 'x6') R5,
  FORMAT(-123, 'x') R6,
  FORMAT(1.23, 'X') R7;
+------+------+--------+--------+--------+----------+------+
| R1   | R2   | R3     | R4     | R5     | R6       | R7   |
|------+------+--------+--------+--------+----------+------|
| 7B   | 7b   | 00007b | bc614e | 00007b | ffffff85 | NULL |
+------+------+--------+--------+--------+----------+------+

A lista acima é uma lista completa de strings de formato numérico personalizado .NET válidas, com base nas informações da documentação oficial .NET para strings de formato numérico padrão no site da Microsoft no momento da redação.

A razão pela qual eles são relevantes para o SQL Server FORMAT() função é que esta função só aceita cadeias de caracteres de formato .NET Framework válidas.

Além do padrão acima strings de formato, você também pode usar personalizado cadeias de formato. Aqui está uma lista completa de strings de formato numérico personalizado que você pode usar com o SQL Server.

Você também pode formatar valores de data e hora. Veja a lista de strings de formato de data e hora padrão, bem como as strings de formato de data e hora personalizadas que você pode usar com o FORMAT() função.

Se você ainda está tentando entender o que é uma string de formato, consulte O que é uma string de formato no SQL Server? para uma compreensão básica das strings de formato e como elas pertencem ao FORMAT() função.