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

<<续>>
MySQL的函数大列9大类:

流程控制函数字串函数数值函数日期时间函数全文检索函数型别转换函数XML函数其他函数用在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' --> 回传第一个参数加上第二个参数的日期时间值

<<待续>>


关于作者: 网站小编

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

热门文章