mysql date类型计算_MySQL date类型
在本教程中,我們將向您介紹MySQL DATE數(shù)據(jù)類型,并演示一些有用的日期函數(shù)來有效處理日期數(shù)據(jù)。
MySQL DATE數(shù)據(jù)類型簡介
MySQL DATE是用于管理日期值的五種時間數(shù)據(jù)類型之一。 MySQL使用yyyy-mm-dd格式存儲日期值。此格式是固定的,不可能更改它。
例如,您可能更喜歡使用mm-dd-yyyy格式,但是遺憾,不能直接使用。 一個代替的辦法:遵循標準日期格式,并使用DATE_FORMAT函數(shù)按所需格式來格式化日期。
MySQL使用3個字節(jié)來存儲DATE值。DATE值的范圍為1000-01-01到9999-12-31。 如果要存儲超出此范圍的日期值,則需要使用非時間數(shù)據(jù)類型,例如整數(shù),例如使用三列,分別存儲年,月和日的數(shù)據(jù)。還需要創(chuàng)建存儲函數(shù)來模擬MySQL提供的內(nèi)置日期函數(shù),這是不推薦的。
當嚴格模式被禁用時,MySQL將任何無效日期(例如2015-02-30)轉(zhuǎn)換為零日期值0000-00-00。
MySQL日期值為兩位數(shù)年份
MySQL使用四位數(shù)字存儲日期值的年份。 如果您使用兩位數(shù)的年份值,MySQL仍會接受以下規(guī)則:
年份值在00-69范圍內(nèi)轉(zhuǎn)換為2000-2069。
70-99的年值被轉(zhuǎn)換為1970 - 1999年。
但是,具有兩位數(shù)字的日期值是不明確的,因此您應避免使用它。
現(xiàn)在,讓我們來看下面的例子。
首先,創(chuàng)建一個名為people表,其生日(birth_date)列使用DATE數(shù)據(jù)類型。
USE testdb;
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
);
接下來,將一行插入到people表中。
INSERT INTO people(first_name,last_name,birth_date)
VALUES('Max','Su','1992-10-11');
然后,查詢people表中的數(shù)據(jù),如下所示 -
SELECT
first_name,
last_name,
birth_date
FROM
people;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
+------------+-----------+------------+
| first_name | last_name | birth_date |
+------------+-----------+------------+
| Max | Su | 1992-10-11 |
+------------+-----------+------------+
1 row in set
之后,使用兩位數(shù)的年份格式將數(shù)據(jù)插入到people表中。
INSERT INTO people(first_name,last_name,birth_date)
VALUES('Jack','Daniel','01-09-01'),
('Lily','Bush','80-09-01');
在第一行,我們使用01(范圍在00-69)作為年份,所以MySQL將其轉(zhuǎn)換為2001年。在第二行,我們使用80(范圍70-99)作為年份,MySQL將其轉(zhuǎn)換為1980年。
最后,從people表查詢數(shù)據(jù),以檢查數(shù)據(jù)是否根據(jù)轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換。
SELECT
first_name,
last_name,
birth_date
FROM
people;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
+------------+-----------+------------+
| first_name | last_name | birth_date |
+------------+-----------+------------+
| Max | Su | 1992-10-11 |
| Jack | Daniel | 2001-09-01 |
| Lily | Bush | 1980-09-01 |
+------------+-----------+------------+
3 rows in set
MySQL DATE函數(shù)
MySQL提供了許多有用的日期功能,可以有效地操作日期。
要獲取當前日期和時間,請使用NOW()函數(shù)。
SELECT NOW() as cur_datetime;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT NOW() as cur_datetime;
+---------------------+
| cur_datetime |
+---------------------+
| 2017-07-25 21:51:54 |
+---------------------+
1 row in set
要獲取DATETIME值的日期部分,可以使用DATE()函數(shù)。
SELECT DATE(NOW());
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT DATE(NOW());
+-------------+
| DATE(NOW()) |
+-------------+
| 2017-07-25 |
+-------------+
1 row in set
要獲取當前的系統(tǒng)日期,可以使用CURDATE()函數(shù),如下所示:
SELECT CURDATE();
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2017-07-25 |
+------------+
1 row in set
要格式化日期值,可以使用DATE_FORMAT函數(shù)。以下語句使用日期格式模式%m/%d/%Y,格式化日期為:mm/dd/yyyy:
SELECT DATE_FORMAT(CURDATE(), '%m/%d/%Y') today;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT DATE_FORMAT(CURDATE(), '%m/%d/%Y') today;
+------------+
| today |
+------------+
| 07/25/2017 |
+------------+
1 row in set
要計算兩個日期值之間的天數(shù),可以使用DATEDIFF函數(shù),如下所示:
SELECT DATEDIFF('2015-11-04','2014-11-04') days;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
要添加幾天,幾周,幾個月,幾年等到一個日期值,可以使用DATE_ADD函數(shù):
SELECT
'2018-01-01' start,
DATE_ADD('2018-01-01', INTERVAL 1 DAY) 'one day later',
DATE_ADD('2018-01-01', INTERVAL 1 WEEK) 'one week later',
DATE_ADD('2018-01-01', INTERVAL 1 MONTH) 'one month later',
DATE_ADD('2018-01-01', INTERVAL 1 YEAR) 'one year later';
執(zhí)行上面查詢語句,得到以下結(jié)果 -
+------------+---------------+----------------+-----------------+----------------+
| start | one day later | one week later | one month later | one year later |
+------------+---------------+----------------+-----------------+----------------+
| 2018-01-01 | 2018-01-02 | 2018-01-08 | 2018-02-01 | 2019-01-01 |
+------------+---------------+----------------+-----------------+----------------+
1 row in set
類似地,可以使用DATE_SUB函數(shù)從日期中減去間隔值:
SELECT
'2018-01-01' start,
DATE_SUB('2018-01-01', INTERVAL 1 DAY) 'one day before',
DATE_SUB('2018-01-01', INTERVAL 1 WEEK) 'one week before',
DATE_SUB('2018-01-01', INTERVAL 1 MONTH) 'one month before',
DATE_SUB('2018-01-01', INTERVAL 1 YEAR) 'one year before';
執(zhí)行上面查詢語句,得到以下結(jié)果 -
+------------+----------------+-----------------+------------------+-----------------+
| start | one day before | one week before | one month before | one year before |
+------------+----------------+-----------------+------------------+-----------------+
| 2018-01-01 | 2017-12-31 | 2017-12-25 | 2017-12-01 | 2017-01-01 |
+------------+----------------+-----------------+------------------+-----------------+
1 row in set
如果要獲取日期值的日期,月份,季度和年份,可以使用相應的函數(shù):DAY,MONTH,QUARTER和YEAR,如下所示:
SELECT DAY('2018-12-31') day,
MONTH('2018-12-31') month,
QUARTER('2018-12-31') quarter,
YEAR('2018-12-31') year;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT DAY('2018-12-31') day,
MONTH('2018-12-31') month,
QUARTER('2018-12-31') quarter,
YEAR('2018-12-31') year;
+-----+-------+---------+------+
| day | month | quarter | year |
+-----+-------+---------+------+
| 31 | 12 | 4 | 2018 |
+-----+-------+---------+------+
1 row in set
獲得周信息周相關(guān)功能。例如,WEEK函數(shù)返回周數(shù),WEEKDAY函數(shù)返回工作日索引,WEEKOFYEAR函數(shù)返回周日歷。
SELECT
WEEKDAY('2018-12-31') weekday,
WEEK('2018-12-31') week,
WEEKOFYEAR('2018-12-31') weekofyear;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT
WEEKDAY('2018-12-31') weekday,
WEEK('2018-12-31') week,
WEEKOFYEAR('2018-12-31') weekofyear;
+---------+------+------------+
| weekday | week | weekofyear |
+---------+------+------------+
| 0 | 52 | 1 |
+---------+------+------------+
1 row in set
如果沒有傳遞第二個參數(shù),或者如果傳遞參數(shù)為0,則week函數(shù)將返回帶有零的索引的周數(shù)。如果傳遞參數(shù)為1,則將返回1索引的周數(shù)。
SELECT
WEEKDAY('2018-12-31') weekday,
WEEK('2018-12-31',1) week,
WEEKOFYEAR('2018-12-31') weekofyear;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql> SELECT
WEEKDAY('2018-12-31') weekday,
WEEK('2018-12-31',1) week,
WEEKOFYEAR('2018-12-31') weekofyear;
+---------+------+------------+
| weekday | week | weekofyear |
+---------+------+------------+
| 0 | 53 | 1 |
+---------+------+------------+
1 row in set
在本教程中,您已經(jīng)了解并學習了MySQL DATE數(shù)據(jù)類型以及如何使用一些有用的日期函數(shù)來操作日期值。
¥ 我要打賞
糾錯/補充
收藏
加QQ群啦,易百教程官方技術(shù)學習群
注意:建議每個人選自己的技術(shù)方向加群,同一個QQ最多限加 3 個群。
總結(jié)
以上是生活随笔為你收集整理的mysql date类型计算_MySQL date类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美股周四:三大股指连跌两天,谷歌再跌逾4
- 下一篇: trinitycore MySQL模块_