Tipo de dados DATA MySQL

Resumo : neste tutorial, apresentaremos o DATEtipo de dados MySQL e mostraremos algumas funções de data úteis para lidar com os dados de data de maneira eficaz.

Introdução ao tipo de dados MySQL DATE

MySQL DATEé um dos cinco tipos de dados temporais usados ​​para gerenciar valores de data. MySQL usa yyyy-mm-dd formato para armazenar um valor de data. Este formato é fixo e não é possível alterá-lo.

Por exemplo, você pode preferir usar mm-dd-yyyyo formato, mas não pode. Em vez disso, você segue o formato de data padrão e usa a  DATE_FORMATfunção para formatar a data da maneira que desejar.

MySQL usa três bytes para armazenar um DATEvalor. Os DATEvalores variam de  1000-01-01 a  9999-12-31.

Se quiser armazenar um valor de data que esteja fora desse intervalo, você precisará usar um tipo de dados não temporal como um número inteiro , por exemplo, três colunas e cada coluna para o ano, mês e dia.

Além disso, você precisa criar funções armazenadas para simular as funções de data integradas fornecidas pelo MySQL, o que não é recomendado.

Valores de data MySQL com anos de dois dígitos

O MySQL armazena o ano do valor da data usando quatro dígitos. Caso você use valores de ano de dois dígitos, o MySQL ainda os aceita com as seguintes regras:

  • Os valores de ano no intervalo de 00 a 69 são convertidos para 2000 a 2069.
  • Os valores do ano no intervalo 70-99 são convertidos para 1970 – 1999.

No entanto, um valor de data com dois dígitos é ambíguo, portanto você deve evitar usá-lo.

Vamos dar uma olhada no exemplo a seguir.

Primeiro, crie uma tabela chamada pessoas com coluna de data de nascimento com DATEtipo de dados.

CREATE TABLE people (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    birth_date DATE NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Em seguida, insira uma linha na peopletabela.

INSERT INTO people(first_name,last_name,birth_date)
VALUES('John','Doe','1990-09-01');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Em seguida, consulte os dados da peopletabela.

SELECT 
    first_name, 
    last_name, 
    birth_date
FROM
    people;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo de tipo de dados MySQL DATE

Depois disso, use o formato de ano de dois dígitos para inserir dados na peopletabela.

INSERT INTO people(first_name,last_name,birth_date)
VALUES('Jack','Daniel','01-09-01'),
      ('Lily','Bush','80-09-01');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Na primeira linha, usamos 01 (intervalo 00-69) como o ano, então o MySQL o converteu para 2001. Na segunda linha, usamos 80 (intervalo 70-99) como o ano, o MySQL o converteu para 1980.

Por fim, recupere os dados da peopletabela para verificar se os dados foram convertidos com base nas regras de conversão.

SELECT 
    first_name, 
    last_name, 
    birth_date
FROM
    people;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo de ano de dois dígitos do tipo de dados de data MySQL

Funções de data MySQL

O MySQL fornece muitas funções de data úteis que permitem manipular datas de maneira eficaz.

Para obter a data e hora atuais, você usa NOW()a função.

SELECT NOW();Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+---------------------+
| NOW()               |
+---------------------+
| 2017-05-13 07:59:38 |
+---------------------+
1 row in set (0.02 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para obter apenas a parte da data de um DATETIMEvalor, você usa a DATE()função.

SELECT DATE(NOW());Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+-------------+
| DATE(NOW()) |
+-------------+
| 2015-07-13  |
+-------------+
1 row in set (0.01 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para obter a data atual do sistema, você usa   CURDATE()a função da seguinte forma:

SELECT CURDATE();Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+------------+
| CURDATE()  |
+------------+
| 2015-07-13 |
+------------+
1 row in set (0.02 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para formatar um valor de data, você usa   DATE_FORMATa função. A instrução a seguir formata a data mm/dd/yyyy usando o padrão de formato de data  %m/%d/%Y :

SELECT DATE_FORMAT(CURDATE(), '%m/%d/%Y') today;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+------------+
| today      |
+------------+
| 07/13/2015 |
+------------+
1 row in set (0.02 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para calcular o número de dias entre dois valores de data, use a DATEDIFFfunção da seguinte forma:

SELECT DATEDIFF('2015-11-04','2014-11-04') days;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+------+
| days |
+------+
|  365 |
+------+
1 row in set (0.02 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para adicionar um número de dias, semanas, meses, anos, etc. a um valor de data, você usa a DATE_ADDfunção:

SELECT 
    '2015-01-01' start,
    DATE_ADD('2015-01-01', INTERVAL 1 DAY) 'one day later',
    DATE_ADD('2015-01-01', INTERVAL 1 WEEK) 'one week later',
    DATE_ADD('2015-01-01', INTERVAL 1 MONTH) 'one month later',
    DATE_ADD('2015-01-01', INTERVAL 1 YEAR) 'one year later';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL DATE - exemplo DATE_ADD

Da mesma forma, você pode subtrair um intervalo de uma data usando a DATE_SUBfunção:

SELECT 
    '2015-01-01' start,
    DATE_SUB('2015-01-01', INTERVAL 1 DAY) 'one day before',
    DATE_SUB('2015-01-01', INTERVAL 1 WEEK) 'one week before',
    DATE_SUB('2015-01-01', INTERVAL 1 MONTH) 'one month before',
    DATE_SUB('2015-01-01', INTERVAL 1 YEAR) 'one year before';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL DATE - exemplo DATE_SUB

Se quiser obter o dia, mês, trimestre e ano de um valor de data, você pode usar a função correspondente ,,, DAYe da seguinte forma:MONTHQUARTERYEAR

SELECT DAY('2000-12-31') day, 
       MONTH('2000-12-31') month, 
       QUARTER('2000-12-31') quarter, 
       YEAR('2000-12-31') year;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+------+-------+---------+------+
| day  | month | quarter | year |
+------+-------+---------+------+
|   31 |    12 |       4 | 2000 |
+------+-------+---------+------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para obter as informações da semana, você usa as funções relacionadas à semana. Por exemplo, WEEKa função retorna o número da semana, WEEKDAYa função retorna o índice dos dias da semana e WEEKOFYEARa função retorna a semana do calendário.

SELECT 
    WEEKDAY('2000-12-31') weekday,
    WEEK('2000-12-31') week,
    WEEKOFYEAR('2000-12-31') weekofyear;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+---------+------+------------+
| weekday | week | weekofyear |
+---------+------+------------+
|       6 |   53 |         52 |
+---------+------+------------+
1 row in set (0.04 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A função semana retorna o número da semana com o índice baseado em zero se você não passar o segundo argumento ou se passar 0. Se você passar 1, ela retornará o número da semana com indexação 1.

SELECT 
    WEEKDAY('2000-12-31') weekday,
    WEEK('2000-12-31',1) week,
    WEEKOFYEAR('2000-12-31') weekofyear;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+---------+------+------------+
| weekday | week | weekofyear |
+---------+------+------------+
|       6 |   52 |         52 |
+---------+------+------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste tutorial, você aprendeu sobre o DATEtipo de dados MySQL e como usar algumas funções de data úteis para manipular valores de data.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *