<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SELECT NOW(),CURDATE(),CURTIME(), -- datetime 轉 date time NOW(), DATE(NOW()), TIME (NOW()), CONCAT(DATE(NOW()), ' ', TIME (NOW())), -- str 轉 datetime date time str_to_date('2019-04-25 08:50:00', '%Y-%m-%d %H:%i:%s'),DATE('2019-04-25 08:50:00'),TIME ('2019-04-25 08:50:00'), str_to_date('2019-04-25 08:50:00', '%Y-%m-%d %T'), -- 比較 NOW() = CONCAT(DATE(NOW()), ' ', TIME (NOW())), DATE(NOW()) = '2019-04-25', NOW() = DATE(NOW()), NOW() = TIME (NOW()); -- 獲取當前時間的函數 select CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME; -- 當前時間 select CURRENT_TIMESTAMP(), CURRENT_DATE(), CURRENT_TIME(), CURDATE(), CURTIME(); -- 當前時間 select now(), sysdate(), SLEEP(3), now(), sysdate(); -- 當前時間 select UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME(); -- UTC時間 select UNIX_TIMESTAMP(), UNIX_TIMESTAMP(now());-- 函數返回連線當前時區內的值(時間戳) select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d %H:%i:%s'); -- 時間戳格式化 select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s'); -- 時間格式化 -- ----------------- 補充日期操作 /* 對日期進行 加減(兩個函數記一個即可) DATE_ADD(date,INTERVAL expr type); DATE_SUB(date,INTERVAL expr type); type取值:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、YEAR_MONTH、DAY_SECOND 等等 */ -- 加1天 select DATE_ADD(now(),INTERVAL 1 DAY), DATE_SUB(now(),INTERVAL -1 DAY); -- 複合型:加1年1月 select DATE_ADD(now(),INTERVAL '1 1' YEAR_MONTH), DATE_SUB(now(),INTERVAL '-1 -1' YEAR_MONTH); -- 加1天2時3分4秒 select DATE_ADD('2020-12-23 00:00:00',INTERVAL '1 2:3:4' DAY_SECOND),DATE_SUB('2020-12-23 00:00:00',INTERVAL '-1 -2:-3:-4' DAY_SECOND); /* 獲取兩個日期之間的差值(datetime_expr2-datetime_expr1的值) TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) unit:差值的單位,取值:FRAC_SECOND(低版本不支援)、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER或YEAR */ -- 查詢兩個日期間的差值(單位秒) select TIMESTAMPDIFF(SECOND,'2020-12-01 00:00:00','2020-12-01 01:01:01');
本文基於MySQL 5.7版本。
MySQL中表示時間值的日期和時間資料型別有以下五個:
(1)DATE
(2)TIME
(3)DATETIME
(4)TIMESTAMP
(5)YEAR
MySQL允許對TIME、DATETIME和TIMESTAMP使用小數秒,精度最高可達微秒(6位小數)。要定義包含小數秒日期和時間資料型別的列,使用
type_name(fsp),
其中type_name是TIME、DATETIME或TIMESTAMP,而fsp是小數秒精度,fsp的值,如果給定,必須在0 ~ 6之間。值為0表示沒有小數部分。如果省略,預設精度為0。
例如:
CREATE TABLE date_time_test (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
Date
支援的範圍 '1000-01-01' to '9999-12-31',MySQL以'YYYY-MM-DD'格式顯示Date型別,但允許使用字串或數位將值賦給DATE列。字面常數轉換規則如下:
(1)格式為'YYYY-MM-DD'或'YY-MM-DD'的字串。任何標點字元都可以用作日期部分之間的分隔符。例如,'2012-12-31'、'2012/12/31'、'2012^12^31'和'2012@12@31'是等價的。
(2)格式為'YYYYMMDD'或'YYMMDD'的沒有分隔符的字串,只要該字串具有日期的意義。例如,'20070523'和'070523'被解釋為'2007-05-23',但'071332'是非法的(它有無意義的月和日部分),會變成'0000-00-00'。
(3)作為YYYYMMDD或YYMMDD格式的數位,只要該數位作為日期有意義。例如,19830905和830905被解釋為“1983-09-05”。
DATETIME和DATETIME(fsp)
DATETIME型別是Date和Time的組合。支援的範圍從'1000-01-01 00:00:00.000000' 到'9999-12-31 23:59:59.999999'。MySQL以'YYYY-MM-DD hh:mm:ss[.fraction]'的格式顯示DATETIME型別。但允許使用字串或數位向DATETIME列賦值。字面常數轉換規則如下:
表中的任何TIMESTAMP或DATETIME列都可以具有自動初始化和更新屬性。
(1)格式為“YYYY-MM-DD hh:mm:ss”或“YY-MM-DD hh:mm:ss”字串。任何標點字元都可以用作日期部分或時間部分之間的分隔符。例如,'2012-12-31 11:30:45'、'2012^12^31 11+30+45'、'2012/12/31 11*30*45'和'2012@12@31 11^30^45'是等價的。
(2)在日期和時間部分和小數秒部分之間識別的唯一分隔符是小數點。
(3)日期和時間部分可以用T而不是空格分隔。例如,'2012-12-31 11:30:45' '2012-12-31 t11:30:45 '是等價的。
(4)格式為'YYYYMMDDhhmmss'或'YYMMDDhhmmss'無分隔符的字串,只要該字串具有日期的意義。例如,'20070523091528'和'070523091528'被解釋為'2007-05-23 09:15:28',但'071122129015'是非法的(它有一個無意義的分鐘部分),會變成'0000-00-00 00:00:00'。
(5)YYYYMMDDhhmmss或YYMMDDhhmmss格式的數位,只要該數位作為日期有意義。例如,19830905132800和830905132800被解釋為“1983-09-05 13:28:00”。
TIMESTAMP和TIMESTAMP[(fsp)]
支援的範圍'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC(UTC指的是世界標準時間),TIMESTAMP值儲存為自紀元('1970-01-01 00:00:00' UTC)以來的秒數,但是它不能表示'1970-01-01 00:00:00',因為這表示從紀元開始的0秒,值0保留用於表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常數同DATETIME。
上面date_time_test表ts列是TIMESTAMP,一旦建立後,我們發現ts列預設值為當前TIMESTAMP,而且可自動更新為當前時間戳,如圖:
支援的範圍'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC(UTC指的是世界標準時間),TIMESTAMP值儲存為自紀元('1970-01-01 00:00:00' UTC)以來的秒數,但是它不能表示'1970-01-01 00:00:00',因為這表示從紀元開始的0秒,值0保留用於表示“0000-00-00 00:00:00”,即“零”的TIMESTAMP值。TIMESTAMP的字面常數同DATETIME。
上面date_time_test表ts列是TIMESTAMP,一旦建立後,我們發現ts列預設值為當前TIMESTAMP,而且可自動更新為當前時間戳,如圖:
向date_time_test表中插入一條資料,如下:
insert date_time_test(t) values('00:00:01');
檢視資料,如圖:
發現ts列自動更新為插入資料時的時間戳。
更新當前資料,如圖:
update date_time_test set t='00:00:02' where t='00:00:01';
再次檢視時間戳,如圖:
ts列已經更新為當前時間戳。這和MySQL的系統變數explicit_defaults_for_timestamp有關,
show variables like 'explicit_defaults_for_timestamp';
如圖:
explicit_defaults_for_timestamp處於關閉狀態,此時,插入資料時,如果ts沒有指定值,會被初始化為預設值,更新資料時,ts列同時更新。 explicit_defaults_for_timestamp處於開啟狀態,不會被初始化為預設,也不具備自動更新為當前時間戳。也可以對TIMESTAMP和DATETIME如下顯示定義預設值和自動更新:
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
TIME和TIME(fsp)
支援的範圍'-838:59:59.000000' to '838:59:59.000000',MySQL以'hh:mm:ss[.fraction]'格式顯示TIME,但允許使用字串或數位向TIME列賦值。TIME型別這個時間範圍表明它不僅可以表示一天的時間,也可以表示經過的時間或兩個事件之間的時間間隔。字面常數轉換規則如下:
(1)MySQL將帶有冒號的TIME值縮寫為一天中的時間,例如:'11:12'表示'11:12:00',而不是 '00:11:12';
(2)MySQL將沒有冒號的TIME縮寫值最右邊的兩個數位看成秒,例如:'1112'和1112都表示'00:11:12'
(3)在時間部分和小數秒部分之間識別的唯一分隔符是小數點;
(4)預設情況下,位於TIME範圍之外但在其他方面有效的值將被裁剪到該範圍中最近的端點。例如,'-850:00:00'和'850:00:00'會轉換為'-838:59:59'和'838:59:59'。無效的TIME值將被轉換為“00:00:00”。注意,由於'00:00:00'本身是一個有效的TIME值,因此無法從儲存在表中的'00:00:00'值判斷原始值是'00:00:00'還是無效的。
YEAR和YEAR(4)
支援的範圍1901到2155,或者0000。MySQL以YYYY格式顯示YEAR。但允許使用字串或數位向YEAR列賦值。
SUM()和AVG()聚合函數不能處理時間值。要解決這個問題,請將其轉換為數位,然後執行聚合操作,最後將其轉換回時間值。例子:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name; SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
YEAR接受如下格式的輸入:
(1)4位元字串'1901' 到 '2155';
(2)4位元數位1901 到 2155;
(3)1或者2位字串'0' 到 '99',MySQL將'0'到'69'轉化為2000到2069,將'70'到'99'轉化為1970到1999;
(4)1或者2位數位0到 99,MySQL將1到69轉換為YEAR值2001到2069,將70到99轉化為YEAR值1970到1999,0轉化為YEAR值0000。
注:
如果沒有啟用strict SQL模式,MySQL會將無效的YEAR值轉換為0000。在嚴格SQL模式下,試圖插入無效的YEAR值將產生錯誤。
總結如下:
DATE | TIME | DATETIME | TIMESTAMP | YEAR | |
取值範圍 | '1000-01-01' 到 '9999-12-31' | '-838:59:59.000000' 到 '838:59:59.000000' | '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999' | '1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC | 1901 到 2155 或者0000 |
小數位精度 | 0 | 0~6 | 0~6 | 0~6 | 0 |
顯示格式 | YYYY-MM-DD | hh:mm:ss[.fraction] | YYYY-MM-DD hh:mm:ss[.fraction] | YYYY-MM-DD hh:mm:ss[.fraction] | YYYY |
賦值 | 允許使用符合格式的字串或數位賦值 | 允許使用符合格式的字串或數位賦值 | 允許使用符合格式的字串或數位賦值 | 允許使用符合格式的字串或數位賦值 | 允許使用符合格式的字串或數位賦值 |
小數位分隔符 | 無 | 只識別小數點. | 只識別小數點. | 只識別小數點. | 無 |
日期分隔符 | 任何標點 | 無 | 任何標點 | 任何標點 | 無 |
時間分隔符 | 無 | 任何標點 | 任何標點 | 任何標點 | 無 |
無效值處理(strict mode關閉狀態) | 轉化為 0000-00-00 | 轉化為 0000-00-00 00:00:00 | 轉化為 0000-00-00 00:00:00 | 轉換為 00:00:00 | 轉換為0000 |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45