@label:数学函数
ABS(x)
BIN(x)
CEILING(x)
EXP(x)
FLOOR(x)
GREATEST(x1,x2,...,xn)
LEAST(x1,x2,...,xn)
LN(x)
LOG(x,y)
MOD(x,y)
PI()
RAND()
ROUND(x,y)
SIGN(x)
SQRT(x)
TRUNCATE(x,y)
@label:聚合函数
AVG(X)
COUNT(X)
MIN(X)
MAX(X)
SUM(X)
GROUP_CONCAT(X)
@label:字符串函数
ASCII(char)
BIT_LENGTH(str)
CONCAT(s1,s2...,sn)
CONCAT_WS(sep,s1,s2...,sn)
INSERT(str,x,y,instr)
FIND_IN_SET(str,list)
LCASE(str)或LOWER(str)
LEFT(str,x)
LENGTH(s)
LTRIM(str)
POSITION(substr,str)
QUOTE(str)
REPEAT(str,srchstr,rplcstr)
REVERSE(str)
RIGHT(str,x)
RTRIM(str)
STRCMP(s1,s2)
TRIM(str)
UCASE(str)或UPPER(str)
@label:日期和时间函数
CURDATE()或CURRENT_DATE()
CURTIME()或CURRENT_TIME()
DATE_ADD(date,INTERVAL int keyword)
例如
SELECT DATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)
DATE_SUB(date,INTERVAL int keyword)
例如
SELECT DATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)
DAYOFMONTH(date)
DAYOFYEAR(date)
DAYNAME(date)
FROM_UNIXTIME(ts,fmt)
HOUR(time)
MINUTE(time)
MONTH(date)
MONTHNAME(date)
NOW()
QUARTER(date)
例如
SELECT QUARTER(CURRENT_DATE);
WEEK(date)
YEAR(date)
例如,获取当前系统时间
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
返回两个日期值之间的差值(月数)
SELECT PERIOD_DIFF(200302,199802);
在Mysql中计算年龄:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;
这样,如果Brithday是未来的年月日的话,计算结果为0。
下面的SQL语句计算员工的绝对年龄,即当Birthday是未来的日期时,将得到负值。
SELECT DATE_FORMAT(NOW(), '%Y')
- DATE_FORMAT(birthday, '%Y')
-(DATE_FORMAT(NOW(), '00-%m-%d')
< DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee
@label:加密函数
AES_ENCRYPT(str,key)
AES_DECRYPT(str,key)
DECODE(str,key)
ENCRYPT(str,salt)
ENCODE(str,key)
MD5()
PASSWORD(str)
SHA()
例如
SELECT ENCRYPT('root','salt');
SELECT ENCODE('xufeng','key');
SELECT DECODE(ENCODE('xufeng','key'),'key');
SELECT AES_ENCRYPT('root','key');
SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
SELECT MD5('123456');
SELECT SHA('123456');
@label:控制流函数
CASE WHEN [test1] THEN [result1]...ELSE [default] END
CASE [test] WHEN [val1] THEN [result]...ELSE [default] END
IF(test,t,f)
IFNULL(arg1,arg2)
NULLIF(arg1,arg2)
例如
SELECT IFNULL(1,2),
IFNULL(NULL,10),
IFNULL(4*NULL,'false');
NULLIF()函数将会检验提供的两个参数是否相等,如果相等,则返回NULL,
SELECT NULLIF(1,1),
NULLIF('A','B'),
NULLIF(2+3,4+1);
MySQL的IF()函数也可以建立一个简单的条件测试,
这个函数有三个参数,第一个是要被判断的表达式,
如果表达式为真,IF()将会返回第二个参数,
如果为假,IF()将会返回第三个参数。
例如
SELECT IF(1<10,2,3),IF(56>100,'true','false');
IF()函数在只有两种可能结果时才适合使用。
然而,在现实世界中,我们可能发现在条件测试中会需要多个分支。
在这种情况下,它和PHP及Perl语言的switch-case条件例程一样。
CASE函数的格式有些复杂,通常如下所示:
CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END
这里,第一个参数是要被判断的值或表达式,接下来的是一系列的WHEN-THEN块,
每一块的第一个参数指定要比较的值,如果为真,就返回结果。
所有的WHEN-THEN块将以ELSE块结束,当END结束了所有外部的CASE块时,
如果前面的每一个块都不匹配就会返回ELSE块指定的默认结果。
如果没有指定ELSE块,而且所有的WHEN-THEN比较都不是真,MySQL将会返回NULL。
CASE函数还有另外一种句法,有时使用起来非常方便,如下:
CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END
这种条件下,返回的结果取决于相应的条件测试是否为真。
例如:
SELECT CASE 'green'
WHEN 'red' THEN 'stop'
WHEN 'green' THEN 'go' END;
SELECT CASE 9
WHEN 1 THEN 'a'
WHEN 2 THEN 'b' ELSE 'N/A' END;
SELECT CASE WHEN (2+2)=4 THEN 'OK'
WHEN (2+2)<>4 THEN 'not OK' END AS STATUS;
SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT
FROM UserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total,
CASE WHEN (math+sci+lit) < 50 THEN 'D'
WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
ELSE 'A' END AS grade FROM marks;
SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResult
FROM users WHERE uname = 'sue';
@label:格式化函数
DATE_FORMAT(date,fmt)
FORMAT(x,y)
INET_ATON(ip)
INET_NTOA(num)
TIME_FORMAT(time,fmt)
其中最简单的是FORMAT()函数,
它可以把大的数值格式化为以逗号间隔的易读的序列。
例如
SELECT FORMAT(34234.34323432,3);
SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
SELECT DATE_FORMAT(NOW(),'%h:%i %p');
SELECT INET_ATON('10.122.89.47');
SELECT INET_NTOA(175790383);
@label:类型转化函数
为了进行数据类型转化,MySQL提供了CAST()函数,
它可以把一个值转化为指定的数据类型。
类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
例如
SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);
@label:系统信息函数
DATABASE()
BENCHMARK(count,expr)
CONNECTION_ID()
FOUND_ROWS()
USER()或SYSTEM_USER()
VERSION()
例如
SELECT DATABASE(),VERSION(),USER();
SELECTBENCHMARK(9999999,LOG(RAND()*PI()));
该例中,MySQL计算LOG(RAND()*PI())表达式9999999次。