MySQL常用函数应用实例

日期时间函数

/*获取当前时间/日期*/
SELECT CURRENT_TIMESTAMP();
SELECT CURRENT_DATE();
SELECT NOW();
复制代码
/*返回天数,在1到31范围内,如下结果为:31*/
SELECT DAYOFMONTH('2008-12-31');
/*获取一个月的最后一天,如下结果:2008-11-30*/
SELECT LAST_DAY('2008-11-21');
/*当前时间加1年*/
SELECT CURRENT_TIMESTAMP() + INTERVAL 1 YEAR;
/*当前时间加1月*/
SELECT CURRENT_TIMESTAMP() + INTERVAL 1 MONTH;
/*当前时间加1天*/
SELECT CURRENT_TIMESTAMP() + INTERVAL 1 DAY;
/*当前时间加1小时*/
SELECT CURRENT_TIMESTAMP() + INTERVAL 1 HOUR;
/*当前时间加1分钟*/
SELECT CURRENT_TIMESTAMP() + INTERVAL 1 MINUTE;
/*当前时间加1秒*/
SELECT CURRENT_TIMESTAMP() + INTERVAL 1 SECOND;
/*当前日期加10天*/
SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 10 DAY);
SELECT ADDDATE(CURRENT_DATE(), 10);
复制代码
复制代码
DATE_FORMAT(date, format);

/*
如下结果为:201108
*/
SELECT DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y%m');

/*
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位
*/
复制代码
/*计算日期差*/
SELECT DATEDIFF(CURRENT_DATE(), '2008-09-15');

字符串处理函数

/*转换为字符串、字符串连接函数*/
SELECT CONCAT(123);
SELECT CONCAT('a', 'b');
复制代码
/*
LOCATE函数
LOCATE(substr, str);
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0。
如下示例,返回结果:5
*/
SELECT LOCATE('5', '1234567890');

/*
LENGTH函数
中文字符占2位,如下结果为:3
*/
SELECT LENGTH('中a');

/*
CHAR_LENGTH函数
中文字符占1位,如下结果为:2
*/
SELECT CHAR_LENGTH('中a');

/*
字符串连接函数:CONCAT
如下示例结果:'abc123def'
*/
SELECT CONCAT('abc', 123, 'def');

/*
字符串替换函数:REPLACE
如下示例结果:'123def'
*/
SELECT REPLACE('abcdef', 'abc', '123');

/*
字符串截取函数 SUBSTRING(str, begin, length);
截取字符串str,从第begin位开始,长度为length,排序从1开始,中文字符占1位
如下示例结果:'567890'
*/
SELECT SUBSTRING('1234567890', 5, 10);

/*
如果需从右边开始截取可使用负数
如下示例结果:'678'
*/
SELECT SUBSTRING('1234567890', -5, 3);

/*
TRIM函数
删除左右空白字符,如下结果为:'abc'
*/
SELECT TRIM(' abc ');

/*
LTRIM函数
删除左空白字符,如下结果为:'abc '
*/
SELECT LTRIM(' abc ');

/*
RTRIM函数
删除右空白字符,如下结果为:' abc'
*/
SELECT RTRIM(' abc ');

/*
LEFT函数
左截取N个字符,如下结果返回'123'
*/
SELECT LEFT('123456789', 3)

/*
RIGHT函数
右截取N个字符,如下结果返回'789'
*/
SELECT RIGHT('123456789', 3)
复制代码

其它函数

/*将IP地址字符串转换为INT*/
SELECT INET_ATON('127.0.0.1');

/*将INT转换为IP地址字符串*/
SELECT INET_NTOA(2130706433);
/*获取一个6位随机数*/
SELECT SUBSTRING(ROUND(RAND()*2147483647+0.5),1,6)
/*随机获取10条记录*/
SELECT * FROM myTable ORDER BY RAND() LIMIT 10;
/*当查询结果为空时给默认值*/
SELECT IFNULL(myCol, 'defaultVal') FROM tab;
/*三元运算,如下示例返回结果:1*/
SELECT IF(1=1,1,0)
复制代码
/*数据类型转换,如a、b字段均为UNSIGNED
支持数据转换目标类型:
BINARY    
CHAR()     
DATE     
TIME     
DATETIME     
DECIMAL      
SIGNED     
UNSIGNED 
*/
SELECT CAST(a AS SIGNED) - CAST(b AS SIGNED);
SELECT CONVERT(DATE(dt), CHAR(16)) FROM `table`;
复制代码