Como converter strings de data com formato específico para o tipo DATE em SQL

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.

Índice

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: Dia
  • MM: Mês
  • YYYY: 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: Dia
  • MM: Mês
  • YYYY: 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ígitos
  • MM: Mês com 2 dígitos
  • DD: Dia com 2 dígitos
  • Mon: Abreviação do mês (ex.: Jan, Feb, Mar)
  • HH24: Hora no formato de 24 horas
  • MI: Minuto
  • SS: 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.

Índice