Ao realizar operações em bancos de dados SQL, é comum precisar converter strings de data em formatos diferentes para o tipo DATE. Por exemplo, quando os dados inseridos pelos usuários ou provenientes de sistemas externos não seguem o formato de data padrão, as consultas podem não funcionar corretamente se a conversão não for feita corretamente. Este artigo explica detalhadamente como converter strings de data com formatos específicos para o tipo DATE em SQL, cobrindo os principais bancos de dados (MySQL, PostgreSQL, SQL Server, Oracle). Isso permitirá lidar com dados de data de forma consistente, tornando as operações com o banco de dados mais eficientes.
Compreendendo o formato de data no SQL
Entender as diferenças de formato de data é fundamental ao trabalhar com datas em SQL. Os formatos de data variam conforme o banco de dados, sendo comum o uso do formato YYYY-MM-DD
(ano-mês-dia). No entanto, dados inseridos por usuários ou sistemas externos podem vir em formatos diferentes, exigindo a aplicação de métodos de conversão adequados.
Formato de data padrão
A maioria dos sistemas de banco de dados utiliza o formato de data padrão YYYY-MM-DD
. Esse formato é uma norma internacional e é recomendado para garantir consistência no tratamento de datas.
Exemplos de formatos de data diferentes
Os dados inseridos por usuários ou importados de outros sistemas podem vir em diferentes formatos de data, como:
MM/DD/YYYY
DD-MM-YYYY
YYYY/MM/DD
DD Mon YYYY
Por que é necessário converter formatos de data?
Se os formatos de data não forem uniformizados, as comparações e cálculos envolvendo datas podem não ser precisos. Além disso, os resultados das consultas podem não corresponder ao esperado. Portanto, é crucial realizar a conversão correta dos formatos de data.
A seguir, vamos explicar a sintaxe básica para converter strings de data para o tipo DATE no SQL.
Sintaxe básica de conversão de formato de data
Para converter uma string de data para o tipo DATE em SQL, utilizam-se funções ou sintaxes específicas fornecidas por cada sistema de banco de dados. Abaixo estão alguns exemplos de sintaxe básica para os principais sistemas de banco de dados.
Função DATE_FORMAT no MySQL
No MySQL, a função STR_TO_DATE
é usada para converter strings de data para o tipo DATE. Essa função converte a string conforme o formato especificado.
SELECT STR_TO_DATE('31-12-2023', '%d-%m-%Y');
Neste exemplo, a string de data 31-12-2023
é convertida para o tipo DATE
.
Função TO_DATE no PostgreSQL
No PostgreSQL, utiliza-se a função TO_DATE
para converter uma string de data para o tipo DATE.
SELECT TO_DATE('31-12-2023', 'DD-MM-YYYY');
Neste exemplo, a string 31-12-2023
é convertida para o tipo DATE
.
Função CONVERT no SQL Server
No SQL Server, utiliza-se a função CONVERT
para realizar a conversão de strings de data para o tipo DATE. A função CONVERT
utiliza um código de estilo para definir o formato.
SELECT CONVERT(DATE, '12/31/2023', 101);
Neste exemplo, a string 12/31/2023
é convertida para o tipo DATE
.
Função TO_DATE no Oracle
No Oracle, utiliza-se a função TO_DATE
para converter uma string de data para o tipo DATE.
SELECT TO_DATE('31-Dec-2023', 'DD-Mon-YYYY') FROM dual;
Neste exemplo, a string 31-Dec-2023
é convertida para o tipo DATE
.
Compreender os métodos básicos de conversão de formato de data para cada sistema de banco de dados é fundamental para tratar dados de forma precisa. A seguir, explicaremos detalhadamente como realizar essa conversão em cada banco de dados.
Como converter strings de data no MySQL
No MySQL, utiliza-se a função STR_TO_DATE
para converter strings de data para o tipo DATE. Essa função analisa a string conforme o formato especificado e a converte para o valor do tipo DATE.
Uso básico da função STR_TO_DATE
A função STR_TO_DATE
é usada da seguinte forma:
SELECT STR_TO_DATE('31-12-2023', '%d-%m-%Y');
Neste exemplo, a string de data 31-12-2023
é convertida para o tipo DATE
. Os especificadores de formato correspondem a cada parte da string de data:
%d
: Dia%m
: Mês%Y
: Ano
Como lidar com múltiplos formatos
Ao lidar com strings de data em diferentes formatos, use os especificadores de formato correspondentes.
SELECT STR_TO_DATE('2023/12/31', '%Y/%m/%d');
SELECT STR_TO_DATE('12-31-2023', '%m-%d-%Y');
Nesses exemplos, strings de formatos diferentes são convertidas para o tipo DATE
.
Exemplo prático
Na prática, utiliza-se a função para converter strings de data armazenadas em uma tabela, como mostrado abaixo.
SELECT STR_TO_DATE(order_date, '%d-%m-%Y') AS formatted_date
FROM orders;
Neste exemplo, as strings de data armazenadas na coluna order_date
da tabela orders
são convertidas para o tipo DATE
, sendo exibidas com o nome formatted_date
.
A conversão de formato de data no MySQL é fácil de realizar com a função STR_TO_DATE
. Em seguida, explicaremos como converter strings de data no PostgreSQL.
Como converter strings de data no PostgreSQL
No PostgreSQL, utiliza-se a função TO_DATE
para converter strings de data para o tipo DATE. Essa função analisa a string conforme o formato especificado e a converte para o valor do tipo DATE.
Uso básico da função TO_DATE
A função TO_DATE
é usada da seguinte forma:
SELECT TO_DATE('31-12-2023', 'DD-MM-YYYY');
Neste exemplo, a string de data 31-12-2023
é convertida para o tipo DATE
. Os especificadores de formato correspondem a cada parte da string de data:
DD
: DiaMM
: MêsYYYY
: Ano
Como lidar com múltiplos formatos
Ao lidar com strings de data em diferentes formatos, use os especificadores de formato correspondentes.
SELECT TO_DATE('2023/12/31', 'YYYY/MM/DD');
SELECT TO_DATE('12-31-2023', 'MM-DD-YYYY');
Nesses exemplos, strings de formatos diferentes são convertidas para o tipo DATE
.
Exemplo prático
Na prática, utiliza-se a função para converter strings de data armazenadas em uma tabela, como mostrado abaixo.
SELECT TO_DATE(order_date, 'DD-MM-YYYY') AS formatted_date
FROM orders;
Neste exemplo, as strings de data armazenadas na coluna order_date
da tabela orders
são convertidas para o tipo DATE
e exibidas com o nome formatted_date
.
Conversão de formatos complexos
Strings de data com formatos complexos, que incluem caracteres ou símbolos específicos, também podem ser convertidas utilizando os especificadores de formato correspondentes.
SELECT TO_DATE('31-Dec-2023', 'DD-Mon-YYYY');
Neste exemplo, a string 31-Dec-2023
é convertida para o tipo DATE
.
A conversão de formato de data no PostgreSQL é simples de realizar utilizando a função TO_DATE
. A seguir, veremos como converter strings de data no SQL Server.
Como converter strings de data no SQL Server
No SQL Server, as funções CONVERT
e TRY_CONVERT
são usadas para converter strings de data para o tipo DATE. Essas funções analisam a string conforme o estilo especificado e a convertem para o valor do tipo DATE.
Uso básico da função CONVERT
A função CONVERT
é usada da seguinte forma:
SELECT CONVERT(DATE, '12/31/2023', 101);
Neste exemplo, a string de data 12/31/2023
é convertida para o tipo DATE
. O código de estilo 101
indica uma string de data no formato MM/DD/YYYY
.
Uso da função TRY_CONVERT
A função TRY_CONVERT
retorna NULL em caso de falha na conversão, o que permite uma conversão segura.
SELECT TRY_CONVERT(DATE, '31-12-2023', 105);
Neste exemplo, a string de data 31-12-2023
é convertida para o tipo DATE
. O código de estilo 105
indica uma string de data no formato DD-MM-YYYY
.
Como lidar com múltiplos formatos
Ao lidar com strings de data em diferentes formatos, use os códigos de estilo correspondentes.
SELECT CONVERT(DATE, '2023/12/31', 111); -- YYYY/MM/DD
SELECT CONVERT(DATE, '12-31-2023', 110); -- MM-DD-YYYY
Nesses exemplos, strings de diferentes formatos são convertidas para o tipo DATE
.
Exemplo prático
Na prática, utiliza-se a função para converter strings de data armazenadas em uma tabela, como mostrado abaixo.
SELECT CONVERT(DATE, order_date, 101) AS formatted_date
FROM orders;
Neste exemplo, as strings de data armazenadas na coluna order_date
da tabela orders
são convertidas para o tipo DATE
e exibidas com o nome formatted_date
.
Lista de códigos de estilo de data
Abaixo estão alguns dos códigos de estilo mais comuns utilizados no SQL Server:
- 101:
MM/DD/YYYY
- 102:
YYYY.MM.DD
- 103:
DD/MM/YYYY
- 104:
DD.MM.YYYY
- 105:
DD-MM-YYYY
A conversão de formato de data no SQL Server é simples de realizar utilizando as funções CONVERT
e TRY_CONVERT
. A seguir, veremos como converter strings de data no Oracle.
Como converter strings de data no Oracle
No banco de dados Oracle, utiliza-se a função TO_DATE
para converter strings de data para o tipo DATE. Essa função analisa a string conforme o formato especificado e a converte para o valor do tipo DATE.
Uso básico da função TO_DATE
A função TO_DATE
é usada da seguinte forma:
SELECT TO_DATE('31-12-2023', 'DD-MM-YYYY') FROM dual;
Neste exemplo, a string de data 31-12-2023
é convertida para o tipo DATE
. Os especificadores de formato correspondem a cada parte da string de data:
DD
: DiaMM
: MêsYYYY
: Ano
Como lidar com múltiplos formatos
Ao lidar com strings de data em diferentes formatos, use os especificadores de formato correspondentes.
SELECT TO_DATE('2023/12/31', 'YYYY/MM/DD') FROM dual;
SELECT TO_DATE('12-31-2023', 'MM-DD-YYYY') FROM dual;
Nesses exemplos, strings de formatos diferentes são convertidas para o tipo DATE
.
Exemplo prático
Na prática, utiliza-se a função para converter strings de data armazenadas em uma tabela, como mostrado abaixo.
SELECT TO_DATE(order_date, 'DD-MM-YYYY') AS formatted_date
FROM orders;
Neste exemplo, as strings de data armazenadas na coluna order_date
da tabela orders
são convertidas para o tipo DATE
e exibidas com o nome formatted_date
.
Conversão de formatos complexos
Strings de data com formatos complexos, que incluem caracteres ou símbolos específicos, também podem ser convertidas utilizando os especificadores de formato correspondentes.
SELECT TO_DATE('31-Dec-2023', 'DD-Mon-YYYY') FROM dual;
Neste exemplo, a string 31-Dec-2023
é convertida para o tipo DATE
. Mon
indica a abreviação do mês.
Lista de especificadores de formato
Abaixo estão alguns dos especificadores de formato mais comuns usados no Oracle:
YYYY
: Ano com 4 dígitosMM
: Mês com 2 dígitosDD
: Dia com 2 dígitosMon
: Abreviação do mês (ex.: Jan, Feb, Mar)HH24
: Hora no formato de 24 horasMI
: MinutoSS
: Segundo
A conversão de formato de data no Oracle é simples de realizar utilizando a função TO_DATE
. A seguir, vamos discutir os erros comuns durante a conversão e como depurá-los.
Tratamento de erros e dicas de depuração
Ao converter strings de data para o tipo DATE, podem ocorrer diversos erros, como discrepâncias de formato ou datas inválidas. A seguir, abordaremos as causas comuns de erros e como tratá-los de forma eficaz.
Tipos comuns de erros
Os erros mais comuns durante a conversão de datas incluem:
- Discrepância de formato: O formato especificado não corresponde à string de data fornecida.
- Data inválida: Tentativa de converter uma data inexistente (ex.: 30/02/2023).
- Valor NULL: A conversão falha quando a string de data é NULL.
Detecção e tratamento de erros
Abaixo estão métodos para detectar e tratar erros durante a conversão de datas.
MySQL
No MySQL, uma string de data inválida retorna NULL, por isso pode-se utilizar as funções IFNULL
ou COALESCE
para definir um valor padrão.
SELECT IFNULL(STR_TO_DATE(order_date, '%d-%m-%Y'), '1970-01-01') AS formatted_date
FROM orders;
Neste exemplo, se a conversão falhar, o valor padrão 1970-01-01
será retornado.
PostgreSQL
No PostgreSQL, se a função TO_DATE
receber uma string de data inválida, uma exceção será lançada. O bloco TRY...EXCEPT
pode ser usado para capturar erros.
DO $$
BEGIN
SELECT TO_DATE('invalid-date', 'DD-MM-YYYY');
EXCEPTION
WHEN others THEN
RAISE NOTICE 'Invalid date format';
END $$;
Neste exemplo, uma mensagem é exibida quando a conversão falha.
SQL Server
No SQL Server, utiliza-se a função TRY_CONVERT
, que retorna NULL em caso de falha na conversão.
SELECT TRY_CONVERT(DATE, 'invalid-date', 105) AS formatted_date;
Neste exemplo, uma string de data inválida retornará NULL.
Oracle
No Oracle, usa-se um bloco de EXCEPTION
para tratar erros de conversão.
BEGIN
SELECT TO_DATE('invalid-date', 'DD-MM-YYYY') FROM dual;
EXCEPTION
WHEN others THEN
DBMS_OUTPUT.PUT_LINE('Invalid date format');
END;
Neste exemplo, uma mensagem é exibida quando a conversão falha.
Dicas de depuração
Abaixo estão algumas dicas para depurar erros durante a conversão de datas:
- Verifique se os especificadores de formato estão corretos.
- Certifique-se de que a string de data fornecida seja válida.
- Verifique os formatos de data suportados pela função de conversão.
Utilizar especificadores de formato corretos e strings de data válidas ajudará a minimizar os erros durante a conversão de datas. A seguir, apresentamos exemplos práticos e exercícios para aprimorar suas habilidades.
Exemplos práticos e exercícios de conversão de strings de data para o tipo DATE
Exemplo prático: conversão de múltiplos formatos de data
Considere uma tabela contendo strings de data em diferentes formatos. Abaixo está uma maneira de unificar e converter essas strings para o tipo DATE.
Exemplo de dados
Considere a seguinte tabela events
:
CREATE TABLE events (
event_id INT,
event_date VARCHAR(20)
);
INSERT INTO events (event_id, event_date) VALUES
(1, '2023-12-31'),
(2, '31/12/2023'),
(3, 'December 31, 2023');
Exemplo de consulta de conversão
A consulta abaixo lida com os diferentes formatos de data:
SELECT event_id,
CASE
WHEN event_date LIKE '____-__-__' THEN STR_TO_DATE(event_date, '%Y-%m-%d')
WHEN event_date LIKE '__/__/____' THEN STR_TO_DATE(event_date, '%d/%m/%Y')
WHEN event_date LIKE '%____%' THEN STR_TO_DATE(event_date, '%M %d, %Y')
ELSE NULL
END AS formatted_date
FROM events;
Esta consulta utiliza a instrução CASE
para lidar com diferentes formatos e converter as strings de data para o tipo DATE.
Exercícios
A seguir, são apresentados exercícios práticos para testar seus conhecimentos sobre conversão de strings de data.
Exercício 1
Escreva uma consulta SQL para converter a seguinte string de data para o tipo DATE:
- String de data:
15-08-2023
- Formato:
DD-MM-YYYY
Exercício 2
Escreva uma consulta SQL para converter as strings de data armazenadas na coluna sale_date
da tabela sales
para o tipo DATE e exibir o resultado na coluna formatted_sale_date
.
CREATE TABLE sales (
sale_id INT,
sale_date VARCHAR(20)
);
INSERT INTO sales (sale_id, sale_date) VALUES
(1, '08/15/2023'),
(2, '15-08-2023'),
(3, '2023.08.15');
- Os formatos das strings de data são:
08/15/2023
:MM/DD/YYYY
15-08-2023
:DD-MM-YYYY
2023.08.15
:YYYY.MM.DD
Exercício 3
Escreva uma consulta SQL para converter as strings de data armazenadas na coluna birthday
da tabela birthdays
para o tipo DATE, retornando NULL para strings de data inválidas.
CREATE TABLE birthdays (
user_id INT,
birthday VARCHAR(20)
);
INSERT INTO birthdays (user_id, birthday) VALUES
(1, '1990-02-30'),
(2, '29-02-2020'),
(3, '15/08/1995');
- Os formatos das strings de data são:
1990-02-30
:YYYY-MM-DD
29-02-2020
:DD-MM-YYYY
15/08/1995
:DD/MM/YYYY
Esses exercícios práticos ajudarão você a aprimorar suas habilidades em conversão de strings de data para o tipo DATE. A seguir, faremos uma conclusão sobre os tópicos abordados neste artigo.
Conclusão
Neste artigo, explicamos como converter strings de data com formatos específicos para o tipo DATE em SQL. Abordamos as principais formas de conversão em bancos de dados como MySQL, PostgreSQL, SQL Server e Oracle, além de discutir o tratamento de erros e dicas de depuração. Também fornecemos exemplos práticos e exercícios para ajudar a consolidar o aprendizado.
A conversão de formatos de data é uma parte essencial do trabalho com bancos de dados. Realizar conversões precisas garante a integridade dos dados e melhora a confiabilidade das consultas. Sempre tenha em mente os seguintes pontos:
- Utilize os especificadores de formato corretos.
- Valide o formato das strings de data fornecidas.
- Trate corretamente datas inválidas ou discrepâncias de formato.
- Compreenda as funções e sintaxes específicas de cada sistema de banco de dados.
Com essas técnicas, você estará melhor preparado para lidar com diferentes formatos de data em SQL, utilizando todo o poder dessas ferramentas para gerenciar e operar seus bancos de dados de forma eficiente.