<<续>>
MySQL的函数大列9大类:
今天介绍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' --> 回传第一个参数加上第二个参数的日期时间值
<<待续>>