Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menanyakan medan tarikh dan masa MySQL

Bagaimana untuk menanyakan medan tarikh dan masa MySQL

WBOY
WBOYke hadapan
2023-05-27 09:04:335455semak imbas

1. Gambaran keseluruhan jenis tarikh dan masa

Jenis tarikh dan masa yang disokong oleh MySQL termasuk DATETIME, TIMESTAMP, DATE, TIME, YEAR

Perbandingan beberapa jenis adalah seperti berikut:

Bagaimana untuk menanyakan medan tarikh dan masa MySQL

Apabila bercakap tentang pemilihan jenis medan tarikh dan masa, cuma pilih jenis yang sesuai mengikut keperluan storan.

2. Fungsi berkaitan tarikh dan masa

Terdapat banyak fungsi untuk medan tarikh dan masa pemprosesan, beberapa daripadanya sering digunakan dalam pertanyaan

Diperkenalkan di bawah Cara menggunakan fungsi berkaitan berikut:

  • CURDATE dan CURRENT_DATE mempunyai fungsi yang sama, mengembalikan nilai tarikh sistem semasa.

  • CURTIME dan CURRENT_TIME dua fungsi mempunyai kesan yang sama dan mengembalikan nilai masa sistem semasa. Fungsi

  • NOW() dan SYSDATE() mempunyai kesan yang sama dan mengembalikan nilai tarikh dan masa sistem semasa.

  • UNIX_TIMESTAMP Mendapat fungsi cap masa UNIX dan mengembalikan integer yang tidak ditandatangani berdasarkan cap masa UNIX.

  • FROM_UNIXTIME menukar cap masa UNIX kepada format masa dan merupakan fungsi songsang bagi UNIX_TIMESTAMP.

  • TO_DAYS() Mengekstrak nilai tarikh dan mengembalikan bilangan hari sejak AD 0.

  • DAY() Mendapat nilai hari dalam tarikh atau masa yang ditentukan.

  • DATE() Mendapat tarikh dalam tarikh atau masa yang ditentukan.

  • TIME() Mendapat masa dalam tarikh atau masa yang ditentukan.

  • MONTH Mendapat bulan dalam tarikh yang ditetapkan.

  • WEEK Mendapat nombor minggu dalam tahun untuk tarikh yang ditentukan.

  • TAHUN Dapatkan tahun ini.

  • SUKU Mendapat nilai suku tarikh.

  • Fungsi DATE_ADD dan ADDDATE mempunyai fungsi yang sama, kedua-duanya menambah selang masa yang ditentukan pada tarikh.

  • DATE_SUB dan SUBDATE mempunyai fungsi yang sama, kedua-duanya menolak selang masa yang ditentukan dari tarikh.

  • Operasi penambahan masa ADDTIME, menambah masa yang ditentukan pada masa asal.

  • Operasi tolak masa SUBTIME, tolak masa yang ditentukan daripada masa asal.

  • DATEDIFF Mendapat selang antara dua tarikh dan mengembalikan nilai parameter 1 tolak parameter 2.

  • DATE_FORMAT memformat tarikh yang ditentukan dan mengembalikan nilai dalam format yang ditentukan mengikut parameter.

Beberapa contoh penggunaan:

mysql> select CURRENT_DATE,CURRENT_TIME,NOW();
+--------------+--------------+---------------------+
| CURRENT_DATE | CURRENT_TIME | NOW()               |
+--------------+--------------+---------------------+
| 2020-06-03   | 15:09:37     | 2020-06-03 15:09:37 |
+--------------+--------------+---------------------+

mysql> select TO_DAYS('2020-06-03 15:09:37'),
TO_DAYS('2020-06-03')-TO_DAYS('2020-06-01');
+--------------------------------+---------------------------------------------+
| TO_DAYS('2020-06-03 15:09:37') | TO_DAYS('2020-06-03')-TO_DAYS('2020-06-01') |
+--------------------------------+---------------------------------------------+
|                         737944 |                                           2 |
+--------------------------------+---------------------------------------------+

mysql> select MONTH('2020-06-03'),WEEK('2020-06-03'),YEAR('2020-06-03');
+---------------------+--------------------+--------------------+
| MONTH('2020-06-03') | WEEK('2020-06-03') | YEAR('2020-06-03') |
+---------------------+--------------------+--------------------+
|                   6 |                 22 |               2020 |
+---------------------+--------------------+--------------------+

# DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数
mysql> SELECT DATEDIFF('2017-11-30','2017-11-29') AS COL1,
    -> DATEDIFF('2017-11-30','2017-12-15') AS col2;
+------+------+
| COL1 | col2 |
+------+------+
|    1 |  -15 |
+------+------+

3 Pertanyaan kanonik untuk medan tarikh dan masa

Untuk memenuhi keperluan pertanyaan kami Jadi disediakan, keperluan projek selalunya melibatkan pertanyaan penapis bersyarat berdasarkan tarikh atau masa. Mari kita terokai cara membuat pertanyaan dan menapis medan tarikh dan masa, kerana keperluan sedemikian adalah pelbagai.

Pertama sekali, untuk menjadikan pertanyaan lebih tepat, data mesti dimasukkan mengikut spesifikasi. Untuk memastikan tahun menggunakan 4 digit dan hari serta bulan berada dalam julat yang munasabah, kami membuat jadual dan memasukkan beberapa data untuk memudahkan ujian.

CREATE TABLE `t_date` (
`increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`year_col` YEAR NOT NULL  COMMENT '年',
`date_col` date NOT NULL  COMMENT '日期',
`time_col` time NOT NULL  COMMENT '时间',
`dt_col` datetime NOT NULL  COMMENT 'datetime时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`increment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='time测试表';
# 日期和时间都选取当前的日期或时间
INSERT INTO t_date (year_col,date_col,time_col,dt_col,create_time) VALUES 
(year(now()),DATE(NOW()),time(now()),NOW(),NOW());
# 指定日期或时间插入
INSERT INTO t_date ( `year_col`, `date_col`, `time_col`, `dt_col`, `create_time` )
VALUES
    ( 2020, '2020-06-03', '09:00:00', '2020-06-03 10:04:04', '2020-06-03 10:04:04' ),
    ( 2020, '2020-05-10', '18:00:00', '2020-05-10 16:00:00', '2020-05-10 16:00:00' ),
    ( 2019, '2019-10-03', '16:04:04', '2019-10-03 16:00:00', '2019-10-03 16:00:00' ),
    ( 2018, '2018-06-03', '16:04:04', '2018-06-03 16:00:00', '2018-06-03 16:00:00' ),
    ( 2000, '2000-06-03', '16:04:04', '2000-06-03 08:00:00', '2000-06-03 08:00:00' ),
    ( 2008, '2008-06-03', '16:04:04', '2008-06-03 08:00:00', '2008-06-03 08:00:00' ),
    ( 1980, '1980-06-03', '16:04:04', '1980-06-03 08:00:00', '1980-06-03 08:00:00' );

Berdasarkan data dalam jadual ujian di atas, mari belajar cara menulis beberapa pernyataan pertanyaan biasa:

Pertanyaan berdasarkan tarikh atau masa yang setara:

select * from t_date where year_col = 2020;
select * from t_date where date_col = '2020-06-03';
select * from t_date where dt_col = '2020-06-03 16:04:04';

Pertanyaan berdasarkan tarikh atau julat masa:

select * from t_date where date_col > '2018-01-01';
select * from t_date where dt_col >= &#39;2020-05-01 00:00:00&#39; and dt_col < &#39;2020-05-31 23:59:59&#39;;
select * from t_date where dt_col between &#39;2020-05-01 00:00:00&#39; and  &#39;2020-05-31 23:59:59&#39;;

Pertanyaan data bulan ini:

# 查询create_time在本月的数据
select * from t_date where DATE_FORMAT(create_time, &#39;%Y-%m&#39; ) = DATE_FORMAT( CURDATE( ) , &#39;%Y-%m&#39; );

Pertanyaan yang paling terkini hari Data:

# 以date_col为条件 查询最近7天或30天的数据
SELECT * FROM t_date where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(date_col);
SELECT * FROM t_date where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(date_col);

Kaedah menulis pertanyaan lain:

# 查询今天的数据
SELECT * FROM t_date WHERE TO_DAYS(create_time) = TO_DAYS(NOW());
# 查询某个月的数据
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y-%m&#39;)=&#39;2020-06&#39;;
# 查询某年的数据
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y&#39;)= 2020;
SELECT * FROM t_date WHERE YEAR(create_time) = 2020;
# 根据日期区间查询数据,并排序
SELECT * FROM t_date WHERE DATE_FORMAT(create_time, &#39;%Y&#39;) BETWEEN &#39;2018&#39; AND &#39;2020&#39; ORDER BY create_time DESC;

Atas ialah kandungan terperinci Bagaimana untuk menanyakan medan tarikh dan masa MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam