iT邦幫忙

3

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

MySQL提供的系統函數及運算子的清單如下列連結網頁:
http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html
昨天已討論過部分的系統函數, 今天繼續討論...(咦! 鐵人賽不是結束了嗎? 我還沒把MySQL談完, 欲罷不能, 只好繼續..)
MySQL的函數大列9大類:

  1. 流程控制函數

  2. 字串函數

  3. 數值函數

  4. 日期時間函數

  5. 全文檢索函數

  6. 型別轉換函數

  7. XML函數

  8. 其他函數

  9. 用在Group By場合下的函數
    昨天介紹1. 流程控制函數, 2. 字串函數....
    今天介紹3. 數值函數, 4. 日期時間函數, 5. 全文檢索函數

  10. 數值運算函數

    • ABS(): 傳回參數的絕對值
    • ACOS(), ASIN(), ATAN2(), ATAN(): 傳回參數的反三角函數值
    • CEIL(): 傳回不小於(大於或等於)參數值的最小整數值
    • CEILING(): 傳回不小於參數值的最小整數
    • CONV(): 不太懂, 搞懂再來分享
    • COS(), COT(), SIN(), TAN(): 傳回參數的三角函數值
    • CRC32()(v4.1.0): 不太懂, 搞懂再來分享
    • DEGREES(): 徑度換算為角度
    • EXP(): 回傳參數值的指數值
    • FLOOR(): 回傳不大於參數值的最大整數值
    • LN(): 傳回參數值的自然對數值
    • LOG10(): 以10為基底的對數值
    • LOG2(): 以2為基底的對數值
    • LOG(): 傳回參數的自然對數值
    • MOD(): 傳回整數餘數
    • OCT(): 回傳參數值的八進位字串
    • PI(): 傳回取到小數第六位的PI值
    • POW(): 指數運算, 第一個參數為基數, 第二個參數為指數, 算出指數值
    • POWER(): 同等於POW()函數功能
    • RADIANS(): 傳回參數的徑度值
    • RAND(): 傳回隨機浮點數
    • ROUND(): 四捨五入第一個參數值, 第二個參數指定進位小數位
    • SIGN(): 傳回參數的正負號
    • SQRT(): 傳回參數的開平方根值
    • TRUNCATE(): 無條件捨去第一個參數的第二個參數所指小數位後之值
  11. 日期與時間函數

  • ADDDATE()(v4.1.1), DATE_ADD(): 計算多少日期區間後的日期, 例如

    mysql> SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);
    -> '2008-02-02'
    mysql> SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);
    -> '2008-02-02'
    mysql> SELECT ADDDATE('2008-01-02', 31);
    -> '2008-02-02'
    在前兩例的INTERVAL後的日期區間, 除了DAY這個單位外還有
    MICROSECOND, SECOND, MINUTE, HOUR, WEEK, MONTH, QUARTER, YEAR, SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND,
    HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH

  • ADDTIME()(v4.1.1): 計算多少時間區間後的時刻, 例如

    mysql> SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');
    -> '2008-01-02 01:01:01.000001'
    mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
    -> '03:00:01.999997'

  • CONVERT_TZ()(v4.1.3): 時區轉換, 例如

    mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
    -> '2004-01-01 13:00:00'
    mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
    -> '2004-01-01 22:00:00'

  • CURDATE(), CURRENT_DATE(), CURRENT_DATE: 傳回系統現在的日期, 只有日期的部份...

  • CURTIME(), CURRENT_TIME(), CURRENT_TIME: 傳回現在時間, 只有時間的部份...

  • DATE_FORMAT(): 回傳格式化的日期時間, 例如

    mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
    -> 'Sunday October 2009'
    mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
    -> '22:23:00'
    mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00',
    -> '%D %y %a %d %m %b %j');
    -> '4th 00 Thu 04 10 Oct 277'
    mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
    -> '%H %k %I %r %T %S %w');
    -> '22 22 10 10:23:00 PM 22:23:00 00 6'
    mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
    -> '1998 52'
    mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
    -> '00'

關於格式化控制字元, 請參閱MySQL網站的文件說明..真的好多呀! 有30來個..

  • DATE_SUB(), SUBDATE(): 與DATE_ADD相反的計算, 其實, 在DATE_ADD中以負數來計算就相當於DATE_SUB, 看例子吧! 我把所有DATE_ADD的可能計算方式也列出來...

    mysql> SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;
    -> '2009-01-01 00:00:00'
    mysql> SELECT INTERVAL 1 DAY + '2008-12-31';
    -> '2009-01-01'
    mysql> SELECT '2005-01-01' - INTERVAL 1 SECOND;
    -> '2004-12-31 23:59:59'
    mysql> SELECT DATE_ADD('2000-12-31 23:59:59',
    -> INTERVAL 1 SECOND);
    -> '2001-01-01 00:00:00'
    mysql> SELECT DATE_ADD('2010-12-31 23:59:59',
    -> INTERVAL 1 DAY);
    -> '2011-01-01 23:59:59'
    mysql> SELECT DATE_ADD('2100-12-31 23:59:59',
    -> INTERVAL '1:1' MINUTE_SECOND);
    -> '2101-01-01 00:01:00'
    mysql> SELECT DATE_SUB('2005-01-01 00:00:00',
    -> INTERVAL '1 1:1:1' DAY_SECOND);
    -> '2004-12-30 22:58:59'
    mysql> SELECT DATE_ADD('1900-01-01 00:00:00',
    -> INTERVAL '-1 10' DAY_HOUR);
    -> '1899-12-30 14:00:00'
    mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
    -> '1997-12-02'
    mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
    -> INTERVAL '1.999999' SECOND_MICROSECOND);
    -> '1993-01-01 00:00:01.000001'

  • DATE()(v4.1.1): 回傳參數中日期的部份, 如果參數是錯誤的日期值, 會回傳錯誤

  • DATEDIFF()(v4.1.1): 計算兩個參數的時間間隔, 例如

    mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
    -> 1
    mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
    -> -31

  • DAY()(v4.1.1), DAYOFMONTH(): 傳回參數是該參數月份中的那一天...例如DAY('2009-11-12');回傳12

  • DAYNAME()(v4.1.21): 傳回日期參數是週幾的全名, 例如DAYNAME('2009-11-12');傳回'Thursday'

  • DAYOFWEEK(): 回傳日期參數是一週內的第幾天, 第一天是星期日, 例如DAYOFWEEK('2009-11-12);回傳5

  • DAYOFYEAR(): 回傳日期參數是一年內的第幾天, 例如DAYOFYEAR(2009-11-12');回傳316, DAYOFYEAR(2008-12-31');回傳366

  • EXTRACT(): 擷取日期參數的指部位, 例如

    mysql> SELECT EXTRACT(YEAR FROM '2009-07-02');
    -> 2009
    mysql> SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03');
    -> 200907
    mysql> SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');
    -> 20102
    mysql> SELECT EXTRACT(MICROSECOND
    -> FROM '2003-01-02 10:30:00.000123');
    -> 123

<<待續>>


尚未有邦友留言

立即登入留言