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

Strings de formato de data/hora personalizadas com suporte por FORMAT() no SQL Server


Este artigo fornece uma referência para os especificadores de formato de data e hora personalizados que podem ser usados ​​ao formatar datas e/ou horas usando o FORMAT() função no SQL Server, juntamente com exemplos.

Você pode combinar qualquer um desses especificadores de formato para produzir uma string de formato personalizada. Veja abaixo um exemplo de código e uma explicação sobre como funcionam as strings de formato personalizado.



Os exemplos na tabela pressupõem um datetimeoffset valor de 2080-05-01 23:09:08.1234567 +07:00 .
Formatar string Descrição Exemplo
d O dia do mês, de 1 a 31. 1
dd O dia do mês, de 01 a 31. 01
ddd O nome abreviado do dia da semana. Qua
dddd O nome completo do dia da semana. Quarta-feira
f Os décimos de segundo em um valor de data e hora. 1
fff Os centésimos de segundo em um valor de data e hora. 12
fff Os milissegundos em um valor de data e hora. 123
fffff Os dez milésimos de segundo em um valor de data e hora. 1234
fffff Cem milésimos de segundo em um valor de data e hora. 12345
fffffff Os milionésimos de segundo em um valor de data e hora. 123456
fffffff Os dez milionésimos de segundo em um valor de data e hora. 1234567
F Se for diferente de zero, os décimos de segundo em um valor de data e hora. 1
FF Se for diferente de zero, os centésimos de segundo em um valor de data e hora. 12
FFF Se for diferente de zero, os milissegundos em um valor de data e hora. 123
FFFFF Se for diferente de zero, os dez milésimos de segundo em um valor de data e hora. 1234
FFFFF Se for diferente de zero, os cem milésimos de segundo em um valor de data e hora. 12345
FFFFFFF Se for diferente de zero, os milionésimos de segundo em um valor de data e hora. 123456
FFFFFFF Se for diferente de zero, os dez milionésimos de segundo em um valor de data e hora. 1234567
g O período ou era. D.C.
gg O período ou era. D.C.
h A hora, usando um relógio de 12 horas de 1 a 12. 11
hh A hora, usando um relógio de 12 horas de 01 a 12. 11
H A hora, usando um relógio de 24 horas de 0 a 23. 23
HH A hora, usando um relógio de 24 horas de 00 a 23. 23
K Informações de fuso horário. +07:00
m O minuto, de 0 a 59. 9
mm O minuto, de 00 a 59. 09
M O mês, de 1 a 12. 5
MM O mês, de 01 a 12. 05
MMM O nome abreviado do mês. Maio
MMMM O nome completo do mês. Maio
y O segundo, de 0 a 59. 8
ss O segundo, de 00 a 59. 08
t O primeiro caractere do designador AM/PM. P
tt O designador AM/PM. PM
y O ano, de 0 a 99. 80
yy O ano, de 00 a 99. 80
yyy O ano, com um mínimo de três dígitos. 2080
yyy O ano como um número de quatro dígitos. 2080
yyy O ano como um número de cinco dígitos. 02080
z Horas de deslocamento do UTC, sem zeros à esquerda. +7
zz Horas de deslocamento do UTC, com um zero à esquerda para um valor de um dígito. +07
zzz Horas e minutos de deslocamento do UTC. +07:00
: O separador de tempo. :
/ O separador de data. /
"string" Delimitador de string literal. cadeia
% Define o caractere a seguir como um especificador de formato personalizado.
\ O caractere de escape.

Qualquer outro caractere é copiado para a string de resultado inalterada.

Importante: Ao usar uma string de formato personalizado de caractere único, você deve prendê-la com o sinal de porcentagem (% ). Alternativamente, você pode adicionar um espaço. Se você não fizer isso, obterá NULL ou o especificador de formato poderá ser interpretado como um especificador de formato padrão e obterá resultados indesejados.

O que são strings de formato personalizado?


Uma string de formato personalizado consiste em um ou mais especificadores de formato personalizado. A tabela acima lista os especificadores de formato personalizado disponíveis para formatar valores de data e hora em uma string.

Há também strings de formato de data e hora padrão. Cada um deles é um alias para uma string de formato personalizado. As strings de formato padrão consistem em um único especificador de formato, portanto, são mais rápidas de usar (mas menos flexíveis que as strings de formato personalizado).

Qualquer string de formato que não seja uma string de formato de data e hora padrão é interpretada como uma string de formato de data e hora personalizada.

Exemplo de uso


A maneira como os especificadores de formato personalizado funcionam é que você pode combiná-los para formar uma string de formato personalizado ao usar o FORMAT() função. Isso determina como o resultado é formatado.

aqui estão alguns exemplos:
DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, 'd, MMM yy') AS 'd, MMM yy',
  FORMAT(@date, 'dd, MMMM yyyy') AS 'dd, MMMM yyyy',
  FORMAT(@date, 'dddd, MMM dd yyyy') AS 'dddd, MMM dd yyyy',
  FORMAT(@date, 'hh:mm:ss') AS 'hh:mm:ss',
  FORMAT(@date, 'hh:mm tt') AS 'hh:mm tt';

Resultado:
+-------------+-----------------+------------------------+------------+------------+
| d, MMM yy   | dd, MMMM yyyy   | dddd, MMM dd yyyy      | hh:mm:ss   | hh:mm tt   |
|-------------+-----------------+------------------------+------------+------------|
| 1, May 80   | 01, May 2080    | Wednesday, May 01 2080 | 11:09:08   | 11:09 PM   |
+-------------+-----------------+------------------------+------------+------------+

Por isso, permite muita flexibilidade na forma como você apresenta suas datas e horários.

Aqui está um exemplo de como usar uma string de formato que consiste em um único especificador de formato.
DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, '%d') AS '%d',
  FORMAT(@date, '%M') AS '%M',
  FORMAT(@date, '%K') AS '%K',
  FORMAT(@date, '%z') AS '%z';

Resultado:
+------+------+--------+------+
| %d   | %M   | %K     | %z   |
|------+------+--------+------|
| 1    | 5    | +07:00 | +7   |
+------+------+--------+------+

Como mencionado, você deve prefixá-los com um sinal de porcentagem para evitar obter NULL e para que o especificador de formato não seja interpretado inadvertidamente como uma string de formato padrão.

Aqui está o que acontece se eu remover o sinal de porcentagem do exemplo anterior:
DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M') AS 'M',
  FORMAT(@date, 'K') AS 'K',
  FORMAT(@date, 'z') AS 'z';

Resultado:
+----------+-------+------+------+
| d        | M     | K    | z    |
|----------+-------+------+------|
| 5/1/2080 | May 1 | NULL | NULL |
+----------+-------+------+------+

Obtemos um resultado completamente diferente.