久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何在mysql中查詢日期及時間字段

131次閱讀
沒有評論

共計 4716 個字符,預計需要花費 12 分鐘才能閱讀完成。

如何在 mysql 中查詢日期及時間字段,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

在項目開發中,一些業務表字段經常使用日期和時間類型,而且后續還會牽涉到這類字段的查詢。關于日期及時間的查詢等各類需求也很多,本篇文章簡單講講日期及時間字段的規范化查詢方法。

1. 日期和時間類型概覽

MySQL 支持的日期和時間類型有
DATETIME、TIMESTAMP、DATE、TIME、YEAR,幾種類型比較如下:

涉及到日期和時間字段類型選擇時,根據存儲需求選擇合適的類型即可。

2. 日期和時間相關函數

處理日期和時間字段的函數有很多,有的經常會在查詢中使用到,下面介紹下幾個相關函數的使用方法。

CURDATE 和 CURRENT_DATE   兩個函數作用相同,返回當前系統的日期值。

CURTIME 和 CURRENT_TIME   兩個函數作用相同,返回當前系統的時間值。

NOW() 和 SYSDATE()   兩個函數作用相同,返回當前系統的日期和時間值。

UNIX_TIMESTAMP   獲取 UNIX 時間戳函數,返回一個以 UNIX 時間戳為基礎的無符號整數。

FROM_UNIXTIME   將 UNIX 時間戳轉換為時間格式,與 UNIX_TIMESTAMP 互為反函數。

TO_DAYS()   提取日期值并返回自公元 0 年到現在的天數。

DAY()     獲取指定日期或時間中的天值。

DATE()   獲取指定日期或時間中的日期。

TIME()   獲取指定日期或時間中的時間。

MONTH   獲取指定日期中的月份。

WEEK   獲取指定日期是一年中的第幾周。

YEAR   獲取年份。

QUARTER   獲取日期所在的季度值。

DATE_ADD 和 ADDDATE   兩個函數功能相同,都是向日期添加指定的時間間隔。

DATE_SUB 和 SUBDATE   兩個函數功能相同,都是向日期減去指定的時間間隔。

ADDTIME   時間加法運算,在原始時間上添加指定的時間。

SUBTIME   時間減法運算,在原始時間上減去指定的時間。

DATEDIFF   獲取兩個日期之間間隔,返回參數 1 減去參數 2 的值。

DATE_FORMAT   格式化指定的日期,根據參數返回指定格式的值。

一些使用示例:

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. 日期和時間字段的規范查詢

上面的內容都是為我們的查詢需求做準備,在項目需求中,經常會以日期或時間為條件進行篩選查詢。有時候這類需求多種多樣,下面我們來學習下關于日期和時間字段的查詢寫法。

首先,為了使查詢更加準確,在插入數據時也要按規范來插入。比如說年份使用 4 位數字,日期和月份要在合理范圍內等,下面為了測試方便,我們創建一個表,并插入部分數據。

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  );

根據上面測試表的數據,我們來學習下幾種常見查詢語句的寫法:

根據日期或時間等值查詢

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

根據日期或時間范圍查詢

select * from t_date where date_col    2018-01-01 
select * from t_date where dt_col  =  2020-05-01 00:00:00  and dt_col    2020-05-31 23:59:59 
select * from t_date where dt_col between  2020-05-01 00:00:00  and  2020-05-31 23:59:59

查詢本月的數據

#  查詢 create_time 在本月的數據
select * from t_date where DATE_FORMAT(create_time,  %Y-%m  ) = DATE_FORMAT( CURDATE( ) ,  %Y-%m  );

查詢最近多少天的數據

#  以 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);

其他各類查詢寫法

#  查詢今天的數據
SELECT * FROM t_date WHERE TO_DAYS(create_time) = TO_DAYS(NOW());
#  查詢某個月的數據
SELECT * FROM t_date WHERE DATE_FORMAT(create_time,  %Y-%m)= 2020-06 
#  查詢某年的數據
SELECT * FROM t_date WHERE DATE_FORMAT(create_time,  %Y)= 2020;
SELECT * FROM t_date WHERE YEAR(create_time) = 2020;
#  根據日期區間查詢數據, 并排序
SELECT * FROM t_date WHERE DATE_FORMAT(create_time,  %Y) BETWEEN  2018  AND  2020  ORDER BY create_time DESC;

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計4716字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 高陵县| 平南县| 汝南县| 青海省| 舟山市| 高安市| 枣阳市| 武城县| 门头沟区| 日土县| 邢台县| 龙南县| 广东省| 新津县| 勐海县| 浦城县| 阿拉善左旗| 朔州市| 台北县| 东方市| 奉节县| 绥滨县| 平陆县| 鹰潭市| 黄梅县| 辰溪县| 古浪县| 崇明县| 延吉市| 安溪县| 扶余县| 浦北县| 平泉县| 葫芦岛市| 莱芜市| 凉城县| 卢湾区| 岳池县| 岳阳县| 芦溪县| 隆德县|