English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá a usar data e hora no SQL.
Além das strings e números, você geralmente precisa armazenar datas e/ou valores de tempo, como a data de nascimento do usuário, a data de contratação do funcionário, a data de eventos futuros, a data e hora de criação ou modificação de uma linha específica na tabela, etc.
Este tipo de dados é chamado de dados temporários e cada motor de banco de dados tem um formato de armazenamento padrão e tipo de dados para eles. A tabela a seguir mostra os tipos de dados de data e hora suportados pelo servidor de banco de dados MySQL.
Tipo | Formato padrão | Valores permitidos |
---|---|---|
DATA | YYYY-MM-DD | 1000-01-01 - |
TEMPO | HH:MM:SS ou HHH:MM:SS | -838:59:59 - |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 - |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 - |
ANO | YYYY | 1901 - |
O formato da valor DATE é YYYY-MM-DD, onde YYYY representa o ano inteiro (4dígitos), enquanto MM e DD representam respectivamente a parte mês e dia da data (números com zeros à frente). O valor de tempo geralmente usa o formato HH:MM:SS, onde HH, MM e SS representam as partes hora, minuto e segundo do tempo.
A seguir, uma instrução demonstra como inserir valores de data em uma tabela de banco de dados:
INSERT INTO employees (emp_name, hire_date, salary) VALUES ('Adam Smith', '2015-06-24', 4500);
Atenção:No MySQL, o valor da parte hora pode ser maior, pois o MySQL os considera como tempo de execução. Isso significa que o tipo de dados de tempo pode não apenas ser usado para representar um tempo do dia (deve ser menor que24horas), também pode ser usado para representar o intervalo de tempo entre dois eventos, que pode ser maior que24horas, até mesmo negativas.
Ao usar bancos de dados de grandes aplicativos, geralmente é necessário armazenar o tempo de criação do registro ou a última modificação no banco de dados, por exemplo, armazenar a data e hora do registro de registro do usuário ou da última atualização da senha do usuário.
No MySQL, você pode usar a função NOW() para inserir o timestamp atual, conforme mostrado a seguir:
-- Sintaxe do banco de dados MySQL INSERT INTO users (name, birth_date, created_at) VALUES ('Bilbo Baggins', '1998-04-16', NOW());
Mas, se você não quiser inserir manualmente a data e hora atuais, basta usar as propriedades de inicialização e atualização automáticas dos tipos de dados TIMESTAMP e DATETIME.
Para atribuir automaticamente propriedades, especifique as subclausulas DEFAULT CURRENT_TIMESTAMP e ON UPDATE CURRENT_TIMESTAMP na definição da coluna, conforme mostrado a seguir:
-- Sintaxe do banco de dados MySQL CREATE TABLE users ( id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL UNIQUE, birth_date DATE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
Atenção:A inicialização e atualização automáticas dos dados do tipo DATETIME, apenas no MySQL 5.6.5ou versões mais recentes. Se você estiver usando uma versão antiga, use TIMESTAMP.
Em alguns casos, você pode querer obter apenas uma parte da data ou hora. No MySQL, você pode usar funções especialmente projetadas para extrair partes de valores de tempo, como YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() e assim por diante.
A seguinte consulta SQL extrairá a parte do ano do valor da coluna birth_date, por exemplo, se o aniversário de qualquer usuário for1987-01-14então YEAR(birth_date) retornará1987.
mysql> SELECT name, YEAR(birth_date) FROM users;
Da mesma forma, você pode usar a função DAYOFMONTH() para obter um dia específico do mês, por exemplo, se o birth_date de qualquer usuário for1986-10-06Se DAYOFMONTH(birth_date) for usada,6.
mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;
Se você quiser usar um formato de data e hora mais descritivo e legível no conjunto de resultados, você pode reformular os valores existentes de data e hora usando as funções DATE_FORMAT() e TIME_FORMAT().
A seguinte instrução SQL configurará um formato de leitura mais fácil.usersna tabelabirth_dateO formato do valor da coluna, por exemplo1987Ano1Mês14do dia1987Ano1Mês14O valor do dia.
mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;