只谈MySQL (第31天) 系统函数(中一)

MySQL提供的系统函数及运算子的清单如下列连结网页:
http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html
昨天已讨论过部分的系统函数, 今天继续讨论...(咦! 铁人赛不是结束了吗? 我还没把MySQL谈完, 欲罢不能, 只好继续..)
MySQL的函数大列9大类:

流程控制函数

字串函数

数值函数

日期时间函数

全文检索函数

型别转换函数

XML函数

其他函数

用在Group By场合下的函数
昨天介绍1. 流程控制函数, 2. 字串函数....
今天介绍3. 数值函数, 4. 日期时间函数, 5. 全文检索函数

数值运算函数

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(): 无条件捨去第一个参数的第二个参数所指小数位后之值

日期与时间函数

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

<<待续>>


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章