iT邦幫忙

3

只談MySQL (第31天) 系統函數(中二)

<<續>>
MySQL的函數大列9大類:

  1. 流程控制函數
  2. 字串函數
  3. 數值函數
  4. 日期時間函數
  5. 全文檢索函數
  6. 型別轉換函數
  7. XML函數
  8. 其他函數
  9. 用在Group By場合下的函數
    今天介紹3. 數值函數, 4. 日期時間函數, 5. 全文檢索函數
    <<續4. 日期時間函數>
  • FROM_DAYS(): 將參數轉換為日期, 例如
    mysql> SELECT FROM_DAYS(730669);
    -> '2007-07-03'

  • FROM_UNIXTIME(), UNIX_TIMESTAMP(): UNIX日期時間格式的處理, 這個不介紹了, 有興趣自行找MySQL文件研究...

  • GET_FORMAT()(v4.1.1): 傳回日期格式字串, 看下列

    GET_FORMAT(DATE,'USA') --> '%m.%d.%Y'
    GET_FORMAT(DATE,'JIS') --> '%Y-%m-%d'
    GET_FORMAT(DATE,'ISO') --> '%Y-%m-%d'
    GET_FORMAT(DATE,'EUR') --> '%d.%m.%Y'
    GET_FORMAT(DATE,'INTERNAL') --> '%Y%m%d'
    GET_FORMAT(DATETIME,'USA') --> '%Y-%m-%d %H.%i.%s'
    GET_FORMAT(DATETIME,'JIS') --> '%Y-%m-%d %H:%i:%s'
    GET_FORMAT(DATETIME,'ISO') --> '%Y-%m-%d %H:%i:%s'
    GET_FORMAT(DATETIME,'EUR') --> '%Y-%m-%d %H.%i.%s'
    GET_FORMAT(DATETIME,'INTERNAL') --> '%Y%m%d%H%i%s'
    GET_FORMAT(TIME,'USA') --> '%h:%i:%s %p'
    GET_FORMAT(TIME,'JIS') --> '%H:%i:%s'
    GET_FORMAT(TIME,'ISO') --> '%H:%i:%s'
    GET_FORMAT(TIME,'EUR') --> '%H.%i.%s'
    GET_FORMAT(TIME,'INTERNAL') --> '%H%i%s'

可以配合DATE_FORMAT()函數運用, 例如

mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));
        -> '03.10.2003'
mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));
        -> '2003-10-31' 
  • HOUR(): 擷取日期參數的小時數值

  • LAST_DAY(v4.1.1): 傳回日期參數所在月份的最後一天, 例如LAST_DAY('2009-11-12');傳回'2009-11-30'

  • MAKEDATE()(v4.1.1): "做日期?" 看例子吧

    mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);
    -> '2011-01-31', '2011-02-01' --> 第一個參數是年份, 第二個參數是指該年份中的第幾天...傳回第二個參數所指的日期
    mysql> SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);
    -> '2011-12-31', '2014-12-31'
    mysql> SELECT MAKEDATE(2011,0);
    -> NULL

  • MAKETIME(v4.1.1): 把時間"做出來"...看例子
    mysql> SELECT MAKETIME(12,15,30);
    -> '12:15:30' --> 我只有一個感想, 發展MySQL的人真的是閒著沒事做

  • MICROSECOND()(v4.1.1): 傳回日期參數的微秒數值

  • MINUTE(): 傳回日期參數的分鐘數值

  • MONTH(): 傳回日期參數的月份數值

  • MONTHNAME()(v4.1.21): 傳回日期參數的月份名稱

  • NOW(), CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP(): 回傳現在的日期及時間, 日期、時間全都有了...而且, 搞了那麼多不同函數來做相同的事...

  • PERIOD_ADD(): 對只有年月的參數加上一月份期間, 例

    mysql> SELECT PERIOD_ADD(200801,2);
    -> 200803

  • PERIOD_DIFF(): 回傳兩個只有年月的參數的月份差, 例

    mysql> SELECT PERIOD_DIFF(200802,200703);
    -> 11

  • QUARTER(): 傳回日期參數是一年中的那一季

  • SEC_TO_TIME(): 把秒數參數轉換為'HH:MM:SS'格式

  • SECOND(): 傳回時間參數的秒數

  • STR_TO_DATE()(v4.1.1): 轉換字串參數為日期, 可將內容為日期的字串變數轉存到日期變數中, 例如

    mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');
    -> '2013-05-01'
    mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');
    -> '2013-05-01'
    mysql> SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
    -> '09:30:17'
    mysql> SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
    -> NULL
    mysql> SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
    -> '09:30:17'

  • SUBTIME()(v4.1.1): 計算時間差, 例

    mysql> SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');
    -> '2007-12-30 22:58:58.999997'
    mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
    -> '-00:59:59.999999'

  • SYSDATE(): 傳回SYSDATE()函數執行當時的系統日期時間, NOW()和SYSDATE()不的是, NOW()只會回傳NOW()函數所在的位置的執行當時時刻..看下例吧

    mysql> SELECT NOW(), SLEEP(2), NOW();
    +---------------------+----------+---------------------+
    | NOW() | SLEEP(2) | NOW() |
    +---------------------+----------+---------------------+
    | 2009-11-12 10:17:12 | 0 | 2009-11-12 10:17:12 |
    +---------------------+----------+---------------------+
    1 row in set (2.01 sec)

    mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
    +---------------------+----------+---------------------+
    | SYSDATE() | SLEEP(2) | SYSDATE() |
    +---------------------+----------+---------------------+
    | 2009-11-12 10:17:36 | 0 | 2009-11-12 10:17:38 |
    +---------------------+----------+---------------------+
    1 row in set (2.00 sec)

  • TIME_FORMAT(): 格式化的時間...例如
    mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
    -> '100 100 04 04 4'
    至於時間格式字元, 參見DATE_FORMAT()的說明

  • TIME_TO_SEC(): 傳回時間參數的秒數

  • TIME()(v4.1.1): 回傳參數中的時間部份

  • TIMEDIFF()(v4.1.1): 計算兩個時間參數的差...傳回值仍以時間格式表現, 例

    mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
    -> '2000:01:01 00:00:00.000001');
    -> '-00:00:00.000001'
    mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001',
    -> '2008-12-30 01:01:01.000002');
    -> '46:58:57.999999'

  • TIMESTAMP()(v4.1.1): 看例子吧

    mysql> SELECT TIMESTAMP('2003-12-31');
    -> '2003-12-31 00:00:00' --> 回傳參數的完整日期時間格式
    mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
    -> '2004-01-01 00:00:00' --> 回傳第一個參數加上第二個參數的日期時間值

<<待續>>


尚未有邦友留言

立即登入留言