Problema:
Você gostaria de exibir um valor de data em outro formato no SQL Server.
Exemplo:
Nosso banco de dados tem uma tabela chamada
company
com dados nas colunas id (chave primária), nome e data_inicial . id | nome | data_inicial |
---|---|---|
1 | Lisa Banco | 20-01-2019 |
2 | Instituto Financeiro de Crédito | 2018-03-14 |
3 | Williams Holding | 28-10-2019 |
Para cada empresa, vamos converter a data de início para um novo formato, 'AAAA/MM/DD', onde AAAA é um ano de 4 dígitos, MM é um mês de 2 dígitos e DD é um dia de 2 dígitos.
Solução 1:
Usaremos o
CONVERT()
função. Aqui está a consulta que você escreveria:SELECT CONVERT(NVARCHAR, start_date, 111 ) AS new_date FROM company;
Aqui está o resultado:
nome | data_inicial |
---|---|
Lisa Banco | 20/01/2019 |
Instituto Financeiro de Crédito | 2018/03/14 |
Williams Holding | 28/10/2019 |
Discussão:
Use o
CONVERT()
função para alterar o formato de uma data de uma determinada coluna ou expressão. Esta função recebe três argumentos:
- O novo tipo de dados (no nosso exemplo, NVARCHAR).
- Uma expressão ou nome de coluna contendo a data a ser formatada (no nosso exemplo, o
start_date
coluna). - Um código de estilo opcional, como um número inteiro. (Em nosso exemplo, o estilo '111' exibe a data usando barras para separar as partes.)
A tabela abaixo apresenta os códigos de estilo de data mais populares:
código | descrição |
---|---|
101 | 30/11/2019 |
102 | 2019.11.30 |
103 | 30/11/2019 |
104 | 30.11.2019 |
105 | 30-11-2019 |
110 | 30-11-2019 |
111 | 2019/11/30 |
Uma lista abrangente de estilos de formato pode ser encontrada na documentação do T-SQL.
A consulta acima alterou o formato da data do Lisa Bank 2019-01-20 para uma string contendo a data '2019/01/20'.
Solução 2:
No SQL Server 2012 e posterior, você pode usar o
FORMAT()
função para alterar os formatos de data/hora. Você usa os caracteres abaixo para especificar o formato desejado:padrão | descrição |
---|---|
dd | dia no intervalo 01-31 |
MM | mês no intervalo 01-12 |
aa | ano de 2 dígitos |
aaaa | ano de 4 dígitos |
HH | hora no intervalo 00-23 |
mm | minutos no intervalo 00-59 |
ss | segundos no intervalo 00-59 |
Aqui está a consulta que você escreveria usando FORMAT():
SELECT FORMAT(start_date, ‘yyyy-MM-dd’ ) AS new_date FROM company;
O primeiro argumento é o valor datetime/date/time para reformatar. A segunda é uma string contendo o padrão do novo formato. Esta função retorna um tipo de dados NVARCHAR. Use
FORMAT()
se você trabalha no SQL Server 2012 ou posterior e deseja converter datas/horas em strings contendo as datas/horas formatadas.