Problema:
Você gostaria de alterar o formato de um campo de data ou valor em um banco de dados SQL Server.
Exemplo:
Nosso banco de dados tem uma tabela chamada
Patient
com dados nas colunas Id
, FirstName
, LastName
e RegistrationDate
. Id | Nome | Sobrenome | Data de registro |
---|---|---|---|
1 | Jane | Williams | 20-06-2019 |
2 | Gabriel | Marrom | 2019-02-02 |
3 | Lora | Gente | 2016-11-05 |
Vamos alterar o formato da data de registro de cada paciente. Colocaremos primeiro o nome do dia da semana, seguido do dia do mês e do nome e um ano de 4 dígitos (por exemplo, "Sexta-feira, 27 de dezembro de 2019").
Solução:
Usaremos a função FORMAT() para alterar o formato da data no
RegistrationDate
coluna. SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy') AS FormattedRegistrationDate FROM Patient;
Segue o resultado da consulta:
Nome | Sobrenome | FormattedRegistrationDate |
---|---|---|
Jane | Williams | Quinta-feira, 20 de junho de 2019 |
Gabriel | Marrom | Sábado, 2 de fevereiro de 2019 |
Lora | Gente | Sábado, 5 de novembro de 2016 |
Discussão:
Podemos alterar como uma determinada data é exibida com a função FORMAT(). Esta função recebe dois argumentos obrigatórios e um argumento opcional. Em nosso exemplo, usamos apenas os dois argumentos obrigatórios. A primeira é uma data, que pode ser de uma coluna data/hora/datahora ou qualquer expressão que retorne uma data ou hora. (No nosso exemplo, usamos a coluna
RegistrationDate
.) O segundo argumento é uma string contendo o novo formato de data. Em nosso exemplo, usamos 'dddd, dd MMMM, aaaa' :- dddd – O nome do dia da semana.
- d – O dia do mês, de 1 a 31.
- MMMM – O nome completo do mês.
- aaaa – O ano de quatro dígitos.
A tabela abaixo apresenta mais especificadores de formato de data/hora:
especificador | descrição |
---|---|
d | Dia no intervalo de 1 a 31 |
dd | Dia no intervalo de 01 a 31 |
dd | O nome abreviado do dia da semana |
dddd | O nome completo do dia da semana |
M | Mês de 1 a 12 |
MM | Mês de 01 a 12 |
MMM | O nome abreviado do mês |
MMMM | O nome completo do mês |
s | ano de 2 dígitos, de 0 a 99 |
aa | ano de 2 dígitos de 00 a 99 |
aaaa | ano de 4 dígitos |
g | Era (por exemplo, A.D.) |
h | Hora de 1 a 12 (relógio de 12 horas) |
hh | Hora de 01 a 12 (relógio de 12 horas) |
H | Hora de 0 a 23 (relógio de 24 horas) |
HH | Hora de 00 a 23 (relógio de 24 horas) |
m | Minuto de 0 a 59 |
mm | Minuto de 00 a 59 |
s | Segundo de 0 a 59 |
ss | Segundo de 00 a 59 |
t | Primeiro caractere de AM ou PM (por exemplo, 9A, 5P) |
tt | AM ou PM |
z | Deslocamento de horas, sem zero à esquerda (por exemplo, +3) |
zz | Deslocamento de horas, com zero à esquerda (por exemplo, +03) |
Você pode saber mais na documentação da Microsoft para formatos de data e hora padrão e formatos personalizados.
Se você quiser formatar esta data para um idioma e/ou país específico, use o terceiro argumento opcional:cultura . Esse argumento é uma string que contém o código de cultura de uma região ou país específico. (Os códigos de cultura são compostos por um código de idioma, um traço e um código de país.) No exemplo abaixo, usamos o código de cultura para a Alemanha, que combina o código do idioma alemão ('de') com o código do país para a Alemanha ('DE'), ou seja, 'de-DE'. A data resultante é exibida em alemão e formatada como um público alemão esperaria vê-la.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE') AS FormattedRegistrationDate FROM Patient;
Aqui está o resultado desta consulta:
Nome | Sobrenome | Data de registro |
---|---|---|
Jane | Williams | Donnerstag, 20 de junho de 2019 |
Gabriel | Marrom | Samstag, 2 de fevereiro de 2019 |
Lora | Gente | Samstag, 5 de novembro de 2016 |