No SQL Server, você pode usar o T-SQL
FORMAT()
função para retornar valores como números e datas como strings formatadas. Você fornece o valor a ser formatado e especifica o formato a ser usado. A função aceita um argumento opcional que permite especificar uma cultura a ser usada ao formatar o valor.
Sintaxe
A sintaxe fica assim:
FORMAT ( value, format [, culture ] )
Onde
value
é o valor que você deseja formatar e format
é uma string de formato válida que especifica o formato desejado. A
culture
opcional argumento pode ser usado para especificar uma cultura. Se omitido, o idioma da sessão atual é usado. O
FORMAT
função é não determinística. Exemplo 1 – Formatar um número
Aqui está um exemplo de formatação de um número:
SELECT FORMAT(1, 'N') AS Result;
Resultado:
+----------+ | Result | |----------| | 1.00 | +----------+
Neste caso, usei
N
como a string de formato. Este é um especificador de formato numérico padrão para a saída do valor como um número. Esse especificador de formato específico 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 especificador de formato não diferencia maiúsculas de minúsculas, portanto, N
ou n
está bem. Exemplo 2 – Formatar para uma moeda
Aqui está um exemplo de formatação de um número como moeda:
SELECT FORMAT(1, 'C') AS Result;
Resultado:
+----------+ | Result | |----------| | $1.00 | +----------+
Mais formatos numéricos
Existem muitas outras strings de formato que podem ser usadas com o
FORMAT()
função. Por exemplo, existem strings de formato para porcentagens, ponto fixo, exponencial (científico), hexadecimal e muito mais. As strings de formato numérico são separadas em padrão e personalizado.
Os dois artigos a seguir listam todas as strings de formato numérico, incluindo exemplos:
- Strings de formato numérico padrão
- Strings de formato numérico personalizado
Consulte também Como formatar números no SQL Server para obter mais exemplos de formatação de números.
Exemplo 3 – Formatar uma data
Aqui está um exemplo de formatação de uma data:
SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';
Resultado:
+-------------------------+------------------------+ | Unformatted Date | Formatted Date | |-------------------------+------------------------| | 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 | +-------------------------+------------------------+
Neste caso, usei
D
que especifica um padrão de data longo. Mais formatos de data
Há muito mais strings de formato que podem ser usadas para formatar datas. Assim como as strings de formato numérico, as strings de formato de data e hora são separadas em padrão e personalizado, para que você possa criar seus próprios formatos personalizados ou confiar em um padrão.
Os dois artigos a seguir listam todas as strings de formato de data e hora, incluindo exemplos:
- Strings de formato padrão de data e hora
- Strings de formato personalizado de data e hora
Consulte também Como formatar a data e hora no SQL Server para obter mais exemplos.
Exemplo 4 – A culture
opcional Argumento
Aqui está um exemplo de uso da
culture
argumento para retornar um valor em várias moedas: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 | +----------+------------+---------+
O
FORMAT()
função aceita qualquer cultura suportada pelo .NET Framework como um argumento; ele não está limitado aos idiomas explicitamente suportados pelo SQL Server. Se você não fornecer esse argumento, o idioma da sessão atual será usado.
Para obter mais exemplos, consulte Como as configurações de idioma podem afetar seu
FORMAT()
Resultados. Exemplo 5 – culture
inválida Argumento
Se você fornecer uma cultura inválida, receberá um erro:
SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';
Resultado:
The culture parameter 'oop-SS!' provided in the function call is not supported.
Exemplo 6 – Valor de formato inválido
No entanto, para outros erros, a função retorna
NULL
. Por exemplo, veja o que acontece se eu fornecer um valor inválido para ser formatado:SELECT FORMAT(GETDATE(), 'C') AS 'Result';
Resultado:
+----------+ | Result | |----------| | NULL | +----------+
Nesse caso, eu estava tentando formatar uma data em uma moeda e, portanto, o resultado foi
NULL
. Tipos de dados válidos
FORMAT()
depende da presença do CLR (Common Language Runtime) do .NET Framework e usa as regras de formatação do CLR. Os seguintes tipos de dados podem ser formatados com o
FORMAT()
função. Essa lista contém os tipos de dados aceitáveis para a string de entrada junto com seus tipos equivalentes de mapeamento do .NET Framework. Categoria | Tipo | tipo .NET |
---|---|---|
Numérico | grande | Int64 |
Numérico | int | Int32 |
Numérico | pequeno | Int16 |
Numérico | tinyint | Byte |
Numérico | decimal | SqlDecimal |
Numérico | numérico | SqlDecimal |
Numérico | flutuar | Duplo |
Numérico | real | Único |
Numérico | dinheiro pequeno | Decimal |
Numérico | dinheiro | Decimal |
Data e hora | data | DataHora |
Data e hora | hora | Intervalo de tempo |
Data e hora | datahora | DataHora |
Data e hora | smalldatetime | DataHora |
Data e hora | datahora2 | DataHora |
Data e hora | deslocamento de data e hora | DateTimeOffset |
Escape de dois pontos e períodos para o tipo de dados 'time'
Ao usar
FORMAT
, dois pontos e pontos devem ser escapados (isso segue as regras de formatação do CLR). Portanto, quando a string de formato (segundo parâmetro) contém dois pontos ou ponto, os dois pontos ou ponto devem ser escapados com uma barra invertida quando um valor de entrada (primeiro parâmetro) for do tempo tipo de dados. Exemplo:
SELECT CAST('12:15' AS time) AS 'Unformatted Data', FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';
Resultado:
+--------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |--------------------+-------------+-----------| | 12:15:00 | NULL | 12.15 | +--------------------+-------------+-----------+
Então, como esperado, a string sem escape retorna
NULL
. Conforme mencionado, isso se aplica apenas ao tempo tipo de dados. Se alterarmos o valor de entrada para um tipo de dados diferente, não precisamos escapar dele:
SELECT CAST('12:15' AS datetime) AS 'Unformatted Data', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';
Resultado:
+-------------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |-------------------------+-------------+-----------| | 1900-01-01 12:15:00.000 | 12.15 | 12.15 | +-------------------------+-------------+-----------+
Nesse caso, o valor de entrada é datetime , e, portanto, o resultado é bom sem escapar dele.
Você também pode usar a barra invertida para escapar de qualquer outro caractere que deseja incluir na string de resultado, que de outra forma seria interpretado como um especificador de formato. Preceder um caractere com uma barra invertida significa que o caractere a seguir é um literal de caractere que deve ser incluído na string de resultado inalterada.
Em uma string personalizada de formato de data e hora, o
d
, f
, F
, g
, h
, H
, K
, m
, M
, y
, t
, y
, z
, :
, ou /
caracteres são interpretados como especificadores de formato personalizado em vez de caracteres literais. Em uma string de formato numérico personalizado, o
#
, 0
, .
, ,
, %
e ‰
os símbolos são interpretados como especificadores de formato e não como caracteres literais. As letras maiúsculas e minúsculas E
bem como o +
e -
os símbolos também podem ser interpretados como especificadores de formato, dependendo de sua posição na string de formato. Se você precisar incluir uma barra invertida na string de resultado, escape-a com outra barra invertida.
Remoto
O
FORMAT()
função não pode ser remota, pois depende da presença do CLR. A remoção remota de uma função que requer o CLR pode causar um erro no servidor remoto. Quando usar o FORMAT()
Função
A Microsoft recomenda que o
FORMAT()
A função é usada para formatação com reconhecimento de localidade de valores de data/hora e número como strings, e para conversões gerais de tipo de dados, o CAST()
ou a função CONVERT()
função deve ser usada em seu lugar.