Resumo : neste tutorial, apresentaremos o DATE
tipo 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-yyyy
o formato, mas não pode. Em vez disso, você segue o formato de data padrão e usa a DATE_FORMAT
função para formatar a data da maneira que desejar.
MySQL usa três bytes para armazenar um DATE
valor. Os DATE
valores 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 DATE
tipo 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 people
tabela.
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 people
tabela.
SELECT
first_name,
last_name,
birth_date
FROM
people;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Depois disso, use o formato de ano de dois dígitos para inserir dados na people
tabela.
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 people
tabela 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 )
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 DATETIME
valor, 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_FORMAT
a 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 DATEDIFF
funçã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_ADD
funçã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 )
Da mesma forma, você pode subtrair um intervalo de uma data usando a DATE_SUB
funçã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 )
Se quiser obter o dia, mês, trimestre e ano de um valor de data, você pode usar a função correspondente ,,, DAY
e da seguinte forma:MONTH
QUARTER
YEAR
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, WEEK
a função retorna o número da semana, WEEKDAY
a função retorna o índice dos dias da semana e WEEKOFYEAR
a 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 DATE
tipo de dados MySQL e como usar algumas funções de data úteis para manipular valores de data.