在Linux中字段名砾肺、數(shù)據(jù)庫名和表名要區(qū)分大小寫默终,比如下時(shí)間函數(shù)等不區(qū)分大小寫
- 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ū)生效
- 時(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顯示別名荐操。
用途舉例:
- 數(shù)據(jù)庫存入的時(shí)間為時(shí)間戳,查詢時(shí)根據(jù)時(shí)區(qū)轉(zhuǎn)換為時(shí)區(qū)時(shí)間珍策。
- 數(shù)據(jù)庫查詢是托启,根據(jù)時(shí)間做查詢條件。
- 數(shù)據(jù)庫刪除時(shí)攘宙,刪除N天之前的日志屯耸。