2019-04-21 mysql 時(shí)間函數(shù)

在Linux中字段名砾肺、數(shù)據(jù)庫名和表名要區(qū)分大小寫默终,比如下時(shí)間函數(shù)等不區(qū)分大小寫

  1. MySQL服務(wù)器中的三種時(shí)區(qū)設(shè)置:
     ∨洹①系統(tǒng)時(shí)區(qū)---保存在系統(tǒng)變量system_time_zone
     ∥杪妗②服務(wù)器時(shí)區(qū)---保存在全局系統(tǒng)變量global.time_zone
      ③每個客戶端連接的時(shí)區(qū)---保存在會話變量session.time_zone
    mysql> show variables like 'system_time_zone';
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | system_time_zone | CST |
    +------------------+-------+
    1 row in set (0.00 sec)
    mysql> select @@global.time_zone,@@session.time_zone;
    +--------------------+---------------------+
    | @@global.time_zone | @@session.time_zone |
    +--------------------+---------------------+
    | +08:00 | +08:00 |
    +--------------------+---------------------+
    1 row in set (0.00 sec)
    時(shí)區(qū)相關(guān)簡介:

show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
UTC:本初子午線(即經(jīng)度0度)上的時(shí)間.北京時(shí)間比UTC時(shí)間早8小時(shí)皆刺。
GMT:是格林尼治平時(shí): UTC 基本上等于GMT 妇蛀。
CST :可以代表如下 4 個不同的時(shí)區(qū):美國耕突,澳大利亞笤成,中國,古巴
Central Standard Time (USA) UTC-6:00
Central Standard Time (Australia) UTC+9:30
China Standard Time UTC+8:00
Cuba Standard Time UTC-4:00
SYSTEM 表示使用“OS時(shí)區(qū)”有勾;
? 臨時(shí)生效的修改MySQL時(shí)區(qū)---》修改global變量(不用重啟)
set global time_zone = '+8:00'; ##修改mysql全局時(shí)區(qū)為北京時(shí)間
set time_zone = '+8:00'; ##修改當(dāng)前會話時(shí)區(qū)
flush privileges; #立即生效
? 通過修改my.cnf配置文件來修改時(shí)區(qū) –》重啟生效
vim /etc/my.cnf ##在[mysqld]區(qū)域中加上
default-time_zone = '+8:00'
/etc/init.d/mysqld restart ##重啟mysql使新時(shí)區(qū)生效

  1. 時(shí)間函數(shù)介紹
    注:日期—》指的是年月日疹启;
    時(shí)間—》指的是時(shí)分秒;
    日期+時(shí)間—》年月日蔼卡,時(shí)分秒喊崖。
    ODBC標(biāo)準(zhǔn):1 = 星期日,2 =星期一...7=星期六
    第一類:獲取當(dāng)前時(shí)間相關(guān)的情況
    (1)now() : 當(dāng)前日期+時(shí)間 select now(); // 2019-04-17 15:23:51
    (2)curdate() :當(dāng)前日期 select curdate(); //2019-04-17
    (3)curtime() : 當(dāng)前時(shí)間 select curtime() //15:23:51
    區(qū)別:
    mysql> select curdate(),curdate()+0;
    +------------+-------------+
    | curdate() | curdate()+0 |
    +------------+-------------+
    | 2017-03-24 | 20170324 |
    +------------+-------------+
    第二類:將日期時(shí)間的格式進(jìn)行—》周相關(guān)
    (1)dayofweek(日期) : 將日期轉(zhuǎn)換為周幾 select dayofweek(‘2019-4-17'); // 3
    mysql> select dayofweek(now());
    +------------------+
    | dayofweek(now()) |
    +------------------+
    | 4 |
    +------------------+ 即:周三雇逞。星期日為1.
    (2)weekday(日期時(shí)間) : 將日期時(shí)間專為周幾 select WEEKDAY(now()); //4
    (3)week(date,first): 將日期轉(zhuǎn)一年的第幾周
    可選參數(shù)2:first的作用—》是周日與周一誰作為一周的開始
    0表示周日是開始(默認(rèn))荤懂,1表示周一是開始
    select week('2019-04-17'); // 15 即:第七周—》等價(jià)于select week('2019-04-17',0);
    select week('2019-04-17',1); //16
    (4) dayname(日期 ): 將日期轉(zhuǎn)換為星期幾(英文名返回)
    select dayname('1998-02-05'); //Thursday
    第三類:將日期時(shí)間的格式進(jìn)行---》天相關(guān)轉(zhuǎn)換
    (1)dayofmonth(日期) : 獲取一月的第幾天(1-31 范圍) select dayofmonth('2019-04-17'); //17
    (2)dayofyear(日期) : 獲取一年的第幾天(1-366 范圍)select dayofyear('2019-04-17'); //107
    (3)to_days(日期) 轉(zhuǎn)換為天數(shù)
    mysql> SELECT TO_DAYS(now());
    +----------------+
    | TO_DAYS(now()) |
    +----------------+
    | 737531 |
    +----------------+
    即:從0年開始 到1997年10月7號之間的天數(shù)。
    第四類:將日期時(shí)間的格式進(jìn)行---》月塘砸,季度节仿,年相關(guān)轉(zhuǎn)換
    (1) month(日期): 獲取日期中的月份值 select month('2019-04-17'); //4
    (2) monthname(日期):獲取日期中英文月份 select monthname('2019-04-17') // April
    (3) quarter(日期): 獲取日期為第幾季度 select quarter('2019-04-17'); //2
    mysql> select quarter(now());
    +----------------+
    | quarter(now()) |
    +----------------+
    | 2 |
    +----------------+
    (4) year(日期) : 獲取日期的年份(范圍1000-9999) select year(now()); //2019

第五類:將時(shí)間的格式進(jìn)行---》時(shí),分相關(guān)轉(zhuǎn)換掉蔬,附件:日期廊宪,時(shí)間
(1)hour(now())
(2)minute(now())
(3)second(now()); -- 秒
(4)microsecond(now()); -- 微秒
mysql> select hour(now()), minute(now()), second(now()),microsecond(now());
+-------------+---------------+---------------+--------------------+
| hour(now()) | minute(now()) | second(now()) | microsecond(now()) |
+-------------+---------------+---------------+--------------------+
| 17 | 23 | 29 | 0 |
+-------------+---------------+---------------+--------------------+
(5)date(now()) -- 日期
(6)time(now()) -- 時(shí)間
mysql> select date(now()), time(now());
+-------------+-------------+
| date(now()) | time(now()) |
+-------------+-------------+
| 2019-04-17 | 17:24:36 |
+-------------+-------------+
第六類:與時(shí)間戳相關(guān)轉(zhuǎn)換
(1) unix_timestamp(now()); 時(shí)間轉(zhuǎn)時(shí)間戳
SELECT UNIX_TIMESTAMP() -- 1509372410
SELECT UNIX_TIMESTAMP(NOW()) -- 1509372410
SELECT UNIX_TIMESTAMP('2017-10-30 22:06:50') -- 1509372410
(2)from_unixtime(1451997924); 時(shí)間戳 轉(zhuǎn)時(shí)間
SELECT FROM_UNIXTIME(1509372410) -- 2017-10-30 22:06:50
SELECT FROM_UNIXTIME(1509372410,'%Y/%m/%d %H:%i:%s') -- 2017/10/30 22:06:50
mysql> SELECT UNIX_TIMESTAMP(NOW());
+-----------------------+
| UNIX_TIMESTAMP(NOW()) |
+-----------------------+
| 1555493183 |
+-----------------------+
mysql> select from_unixtime(UNIX_TIMESTAMP(NOW()));
+--------------------------------------+
| from_unixtime(UNIX_TIMESTAMP(NOW())) |
+--------------------------------------+
| 2019-04-17 17:27:05 |
+--------------------------------------+
第七類:日期時(shí)間計(jì)算函數(shù)
(1)date_add(date, interval expr unit) 為日期增加一個時(shí)間間隔
(2)date_sub(date, interval expr unit) 為日期減去一個時(shí)間間隔
用途:常用于時(shí)間比較,比如執(zhí)行刪除多少天之前的日志女轿。
select date_add(now(), interval 1 day); -- add 1 day
select date_add(now(), interval 1 hour); -- add 1 hour
select date_add(now(), interval 1 minute); -- ...
select date_add(now(), interval 1 second);
select date_add(now(), interval 1 microsecond);
select date_add(now(), interval 1 week);
select date_add(now(), interval 1 month);
select date_add(now(), interval 1 quarter);
select date_add(now(), interval 1 year);
select date_add(now(), interval -1 day); -- sub 1 day
date_sub()用法同上箭启。
mysql> select date_add(now(), interval 1 day),date_sub(now(), interval 1 day);
+---------------------------------+---------------------------------+
| date_add(now(), interval 1 day) | date_sub(now(), interval 1 day) |
+---------------------------------+---------------------------------+
| 2019-04-18 17:29:05 | 2019-04-16 17:29:05 |
+---------------------------------+---------------------------------+
問題:上面參數(shù)1 使用日期 與 日期+時(shí)間,返回值有區(qū)別嗎蛉迹?
mysql> select date_add('2019-04-17', interval 1 day),date_sub('2019-04-17', interval 1 day);
+----------------------------------------+----------------------------------------+
| date_add('2019-04-17', interval 1 day) | date_sub('2019-04-17', interval 1 day) |
+----------------------------------------+----------------------------------------+
| 2019-04-18 | 2019-04-16 |
+----------------------------------------+----------------------------------------+
擴(kuò)展: interval是間隔類型關(guān)鍵字
expr是一個表達(dá)式傅寡,對應(yīng)后面的類型
unit是時(shí)間間隔的單位(間隔類型)(20個),如下:
HOUR 小時(shí)
MINUTE 分
SECOND 秒
MICROSECOND 毫秒
YEAR 年
MONTH 月
DAY 日
WEEK 周
QUARTER 季
YEAR_MONTH 年和月
DAY_HOUR 日和小時(shí)
DAY_MINUTE 日和分鐘
DAY_ SECOND 日和秒
HOUR_MINUTE 小時(shí)和分
HOUR_SECOND 小時(shí)和秒
MINUTE_SECOND 分鐘和秒
最后:日期格式化函數(shù)—》DATE_FORMAT(date, format) 函數(shù)根據(jù)format字符串格式化date值北救。
SELECT DATE_FORMAT('2017-09-20 08:30:45', '%Y-%m-%d %H:%i:%S');
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'); //
mysql> SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S');
+-------------------------------------------+
| DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S') |
+-------------------------------------------+
| 2019-04-18 10:12:21 |
+-------------------------------------------+
mysql> select date_format(now(), '%Y%m%d') as datetime;
+----------+
| datetime |
+----------+
| 20190418 |
+----------+
注意:as顯示別名荐操。

png1..png

用途舉例:

  • 數(shù)據(jù)庫存入的時(shí)間為時(shí)間戳,查詢時(shí)根據(jù)時(shí)區(qū)轉(zhuǎn)換為時(shí)區(qū)時(shí)間珍策。
  • 數(shù)據(jù)庫查詢是托启,根據(jù)時(shí)間做查詢條件。
  • 數(shù)據(jù)庫刪除時(shí)攘宙,刪除N天之前的日志屯耸。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市模聋,隨后出現(xiàn)的幾起案子肩民,更是在濱河造成了極大的恐慌唠亚,老刑警劉巖链方,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異灶搜,居然都是意外死亡祟蚀,警方通過查閱死者的電腦和手機(jī)工窍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來前酿,“玉大人患雏,你說我怎么就攤上這事”蔡海” “怎么了岖研?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵薪鹦,是天一觀的道長。 經(jīng)常有香客問我匀借,道長,這世上最難降的妖魔是什么平窘? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任吓肋,我火速辦了婚禮,結(jié)果婚禮上瑰艘,老公的妹妹穿的比我還像新娘是鬼。我一直安慰自己,他們只是感情好紫新,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布均蜜。 她就那樣靜靜地躺著,像睡著了一般弊琴。 火紅的嫁衣襯著肌膚如雪兆龙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天敲董,我揣著相機(jī)與錄音紫皇,去河邊找鬼。 笑死腋寨,一個胖子當(dāng)著我的面吹牛聪铺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萄窜,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铃剔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了查刻?” 一聲冷哼從身側(cè)響起键兜,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎穗泵,沒想到半個月后普气,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佃延,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年现诀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夷磕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仔沿,死狀恐怖坐桩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情封锉,我是刑警寧澤绵跷,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站成福,受9級特大地震影響抖坪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闷叉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一擦俐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧握侧,春花似錦蚯瞧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萄传,卻和暖如春甚颂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秀菱。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工振诬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衍菱。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓赶么,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脊串。 傳聞我的和親對象是個殘疾皇子辫呻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容