mysql時區與時間函式

rudygao發表於2016-02-03
–在mysql中可以直接使用sleep()函式,sysdate函式返回的是執行到當前函式的時間,而now函式返回的是執行sql的時間
mysql> SELECT now(),SYSDATE(), SLEEP(2),now(), sysdate() from dual;
+———————+———————+———-+———————+———————+
| now()               | SYSDATE()           | SLEEP(2) | now()               | sysdate()           |
+———————+———————+———-+———————+———————+
| 2015-05-29 14:19:43 | 2015-05-29 14:19:43 |        0 | 2015-05-29 14:19:43 | 2015-05-29 14:19:45 |
+———————+———————+———-+———————+———————+
1 row in set (2.00 sec)
–在mysql中不能對日期直接進行加減,要使用date_add,date_sub函式
mysql> select now(),date_add(now(),interval 1 day) as tomorrow,date_sub(now(),interval 1 daY) as yerterday,date_sub(now(),interval -1 day) yesterday2
from dual;
+———————+———————+———————+———————+
| now()               | tomorrow            | yerterday           | yesterday2          |
+———————+———————+———————+———————+
| 2015-05-29 14:40:52 | 2015-05-30 14:40:52 | 2015-05-28 14:40:52 | 2015-05-30 14:40:52 |
+———————+———————+———————+———————+
1 row in set (0.00 sec)
–mysql中weekday從週一開始計算,但週一為0,dayofweek從週日開始計算,從1開始
mysql> select weekday(@a),dayofweek(@a),dayname(@a);
+————-+—————+————-+
| weekday(@a) | dayofweek(@a) | dayname(@a) |
+————-+—————+————-+
|           4 |             6 | Friday      |
+————-+—————+————-+
–格式化日期函式,獲取日期時間型別與timestamp的不同
mysql> select date_format(`2015-10-01 23:59:59`,`%Y-%m-%d %H:%i:%s`);
 select from_unixtime(date_format(`2015-10-01 23:59:59`,`%Y-%m-%d %H:%i:%s`));
 select timestamp(`2015-10-01 23:59:59`);
 
 select date_format(`2015-10-01 23:59:59`,`%Y-%m-%d %H:%i:%s`) from dual where now()>date_format(`2015-10-01 23:59:59`,`%Y-%m-%d %H:%i:%s`);
 
 
–修改時區,則相應的時間函式會返回不同的值
This includes the values displayed by functions such as NOW() or CURTIME(), and values stored in and retrieved from TIMESTAMP columns、
The current time zone setting does not affect values displayed by functions such as UTC_TIMESTAMP() or values in DATE, TIME, or DATETIME columns
 
mysql> SELECT NOW();
+———————+
| NOW()               |
+———————+
| 2016-02-03 09:46:33 |
+———————+
1 row in set (0.00 sec)
 
mysql> set time_zone=`+07:00`;
Query OK, 0 rows affected (0.00 sec)
–時間改變
mysql> SELECT NOW();
+———————+
| NOW()               |
+———————+
| 2016-02-03 08:46:35 |
+———————+
1 row in set (0.00 sec)
–將一個時區的時間轉換成另一個時區的時間
mysql> SELECT CONVERT_TZ(`2004-01-01 12:00:00`,`+00:00`,`+10:00`);
+—————————————————–+
| CONVERT_TZ(`2004-01-01 12:00:00`,`+00:00`,`+10:00`) |
+—————————————————–+
| 2004-01-01 22:00:00                                 |
+—————————————————–+
1 row in set (0.00 sec)
–如果以下查詢結果是null,則時區資訊表裡資料為空
mysql> SELECT CONVERT_TZ(`2004-01-01 12:00:00`,`GMT`,`MET`);
+———————————————–+
| CONVERT_TZ(`2004-01-01 12:00:00`,`GMT`,`MET`) |
+———————————————–+
| 2004-01-01 13:00:00                           |
+———————————————–+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*) FROM mysql.time_zone_name;
+———-+
| COUNT(*) |
+———-+
|        0 |
+———-+
1 row in set (0.00 sec)
–匯入時區資訊到資料庫表中
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p123456 mysql
–檢視資料庫的時區,如果 time_zone = SYSTEM ,則資料庫的時區與作業系統相關
The operating system time affects the value that the MySQL server uses for times if its time zone is set to SYSTEM
mysql> show variables like `%time_zone%`;
+——————+——–+
| Variable_name    | Value  |
+——————+——–+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+——————+——–+
— lc_time_names 變數控制著星期,月,日的顯示方式
The locale indicated by the lc_time_names system variable controls the language used to display day and month names and abbreviations. 
This variable affects the output from the DATE_FORMAT(),DAYNAME(), and MONTHNAME() functions.
lc_time_names does not affect the STR_TO_DATE() or GET_FORMAT() function
mysql> SELECT @@lc_time_names;
+—————–+
| @@lc_time_names |
+—————–+
| en_US           |
+—————–+
1 row in set (0.00 sec)
mysql> SELECT DATE_FORMAT(`2010-01-01`,`%W %a %M %b`);
+—————————————–+
| DATE_FORMAT(`2010-01-01`,`%W %a %M %b`) |
+—————————————–+
| Friday Fri January Jan                  |
+—————————————–+
1 row in set (0.00 sec)


相關文章