No SQL Server, o
FORMAT()
A função permite formatar valores de data/hora e número como uma string formatada passando uma “string de formato” como segundo argumento (o primeiro argumento é o valor que está sendo formatado). Aqui está um exemplo dessa função em ação:
FORMAT(@date, 'dd/MM/yyyy');
Neste caso, a string de formato é dd/MM/aaaa .
Essa string de formato específica especifica que o
@date
O valor deve ser formatado com um dia de dois dígitos, um mês de dois dígitos e um ano de quatro dígitos, nessa ordem, e com barras como separadores. Isso resultaria em algo assim:
21/05/2019
Uma string de formato é uma string que contém um ou mais especificadores de formato predefinidos , que são caracteres únicos ou grupos de caracteres que definem como a saída deve ser formatada.
O SQL Server só aceita cadeias de caracteres de formato com suporte do .NET Framework.
Uma string de formato pode ser uma string de formato padrão ou uma string de formato personalizado. Veja como eles funcionam:
- Uma string de formato padrão é uma string de formato predefinido. Ele contém um único especificador de formato que é interpretado como representando um determinado formato predefinido. As strings de formato padrão são, na verdade, aliases para strings de formato personalizado. No entanto, a string de formato personalizado real usada geralmente dependerá da cultura.
- Uma string de formato personalizado por outro lado, consiste em um ou mais especificadores de formato personalizados que, combinados entre si, definirão o formato. Isso permite muito mais flexibilidade na definição da aparência da saída.
Exemplo 1 - String de formato padrão
Aqui está um exemplo para demonstrar como as strings de formato padrão funcionam.
SELECT FORMAT(1234, 'C') AS Result;
Resultado:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Neste exemplo,
C
é a cadeia de formato. Nesse caso, é uma string de formato numérico padrão que consiste em um único especificador de formato. Esse especificador de formato específico é usado para representar um valor monetário. Também podemos obter o mesmo resultado usando uma string de formato numérico personalizado.
Exemplo 2 – String de formato personalizado
Este exemplo produz a mesma saída que o exemplo anterior. A diferença é que, neste exemplo, eu uso um custom string de formato em vez de um padrão.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Resultado:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Uma string de formato personalizado permite que você crie seu próprio formato personalizado. Você pode combinar strings com especificadores de formato para criar seu próprio formato personalizado.
Neste exemplo, eu uso o
#
especificador de formato, que é um espaço reservado para um dígito. Se um dígito não estiver presente, nenhum dígito aparecerá na string resultante. Eu também uso o
0
especificador de formato, que também é um espaço reservado para qualquer dígito. Mas, neste caso, se um dígito não estiver presente, um zero será usado. Eu também incluo o
$
, ,
e .
strings literais na string de formato. Eles são incluídos na saída exatamente como estão. Se reduzirmos o número de entrada, podemos ver como o resultado é diferente entre o
0
e #
especificadores de formato e como eles se comparam ao C
especificador de formato padrão do exemplo anterior:SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
Resultado:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
Como você pode imaginar, as strings de formato personalizado fornecem muito mais flexibilidade em relação às strings de formato padrão.
No entanto, existem muitos cenários em que as cadeias de caracteres de formato padrão podem ser mais poderosas, especialmente quando se trata de produzir resultados dinâmicos que levam em consideração a cultura. Mais sobre cultura em breve.
Exemplo 3 – Formatação de data e hora
Os valores de data/hora também oferecem a opção de strings de formato padrão ou personalizado. Aqui está um exemplo de um valor de data/hora sendo formatado com uma string de formato padrão, bem como algumas strings de formato personalizado.
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd') AS 'd', FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy', FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy', FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy', FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';
Resultado:
+----------+------------+------------+-------------------+------------------------+ | d | M/d/yyyy | dd/MM/yy | ddd, MMM dd, yy | dddd, dd MMMM yyyy | |----------+------------+------------+-------------------+------------------------| | 5/1/2080 | 5/1/2080 | 01/05/80 | Wed, May 01, 80 | Wednesday, 01 May 2080 | +----------+------------+------------+-------------------+------------------------+
O primeiro usa uma string de formato padrão e os outros quatro usam strings de formato personalizado.
Para obter uma lista completa de strings de formato de data e hora disponíveis, consulte o seguinte:
- Lista de strings de formato padrão de data/hora
- Lista de strings de formato personalizado de data/hora
Exemplo 4 – Cultura
Os resultados das strings de formato às vezes podem depender da cultura que está sendo usada. Por exemplo, nos EUA, um formato de data abreviado é representado como 'M/d/yyyy', mas na Grã-Bretanha é representado como 'dd/MM/yyyy'.
Por padrão, o idioma da sessão atual é usado para definir a cultura. No entanto, o
FORMAT()
função permite que você substitua isso. A sintaxe da função é assim:
FORMAT ( value, format [, culture ] )
Portanto, permite especificar uma cultura como um argumento opcional.
Aqui está um exemplo de onde diferentes culturas podem resultar em uma única string de formato produzindo vários formatos diferentes.
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd', 'en-us') AS 'US English', FORMAT(@date, 'd', 'en-gb') AS 'British', FORMAT(@date, 'd', 'de-de') AS 'German', FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';
Resultado:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
Nesse caso, todos os quatro países usam o
d
string de formato de data e hora padrão. No entanto, todos eles usam um argumento de cultura diferente. Isso produz um resultado diferente para se adequar a cada cultura. E não é apenas padrão strings de formato que são influenciadas pela cultura. A cultura também pode influenciar o resultado do personalizado cadeias de formato. Aqui está um exemplo:
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English', FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German', FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese', FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';
Resultado:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
Você também tem a opção de usar a cultura invariável (
iv
). A cultura invariável é insensível à cultura. Está associado ao idioma inglês, mas não a nenhum país/região. Para obter mais informações e exemplos, consulte Como especificar a cultura invariável ao usar FORMAT() no SQL Server.