mysql数据库函数学习笔记
数学函数
由于MySQL包含了一系列的算术操作,所以关系型数据库管理系统支持很多数学函数
ABS(x);//返回x的绝对值
ACOS(x);//返回x(弧度)的反余弦值
ASIN(x);//返回x(弧度)的反正弦值
ATAN(x);//返回x(弧度)的反正切值
CEILING(x);//返回大于x的最小整数值
COS(x);//返回x(弧度)的余弦值
COT(x);//返回x(弧度)的余切
DEGREES(x);//返回弧度值x转化为角度的结果
EXP(x);//返回值e(自然对数的底)的x次方
FLOOR(x);//返回小于x的最大整数值
GREATEST(x1,x2,x3...);//返回集合中最大的值
LEAST(x1,x2,x3,,,);//返回集合中最小的值
LN(x);//返回x的自然对数
LOG(x,y);//返回x的以y为底的对数
MOD(x,y);//返回x/y的模(余数)
PI();//返回pi的值(圆周率)
POW(x,y)或者POWER(x,y);//返回x的y次幂
RAND();//返回0到1内的随机数
RADIANS(x);//返回角度x转化为弧度的结果
ROUND(x,y);//返回参数x的四舍五入的有y位小数的值
SIGN(x);//返回代表数字x的符号的值
SQRT(x);//返回x的开方
SIN(x);//返回x(弧度)的正弦值
TAN(x);返回x(弧度)的正切值
TRUNCATE(x,y);//返回数字x截短为y位小数的结果
看下面一些例子
select ABS(-123);//取绝对值,结果为123
select GREATEST(100,88,33,156);//获取一组数中最大值,结果为156
练习
计算-34的绝对值,计算3.45234的四舍五入的值,保留2位小数
聚合函数
MySQL有一组函数是特意为求和或者对表中的数据进行集中概括而设计的,这些函数经常用在包含group by从句的select查询中,当然,它们也可以用于无group的查询
AVG(col);//返回指定列的平均值
COUNT(col);//返回指定列中非null值的个数
MIN(col);//返回指定列的最小值
MAX(col);//返回指定列的最大值
SUM(col);//返回指定列的所有值之和
STD(col)或STDDEV(col);//返回指定列的所有值的标准偏差
VARIANCE(col);//返回指定列的所有值的标准方差
GROUP_CONCAT(col);//返回由属于一组的列值连接组合而成的结果
这一组函数中,最常用到的是COUNT()函数,计算出结果集中至少包含一个非null的值的行数
select count(*) from members;
MIN()和MAX()函数返回数字集的最小或最大值
select min(quantity) from inventory;//返回最小值
select max(return) from investments;返回最大值
练习
删除data数据表,新建data表,字段为score,添加两条数据,分别为29和34,计算平均值和最小值
字符串函数
因为MySQL数据库不仅报含数字数据,还包含字符串,因此MySQL有一套为字符串操作而设计的函数。
通过length()函数可以获得一个字符串的长度
select length('aasdfgh');//结果为7
通过trim()函数可以让我们在剪切值时指定去除格式,还可以决定是从字符串的首部,尾部,两边剪切。
select trim(' red alter ');//去掉两边空格
select trim(leading '!' from '!!!error!!!');//去掉首部“!”符号
concat()函数将提供的参数连接成一个字符串
select concat('red','hot');//结果为redhot
这里只是简单列出几个常用的字符串函数,更多函数,请查询MySQL相关文档。
日期时间函数
MySQL提供了很多处理日期时间的函数,这里我们只是选择一些常用的讲述。
使用now()函数获取当前的日期和时间,将以YYYY-MM-DD HH:MM:SS的格式返回当前的日期和时间
select now();//返回当前时间
单独获取日期和时间,可以使用curdate()和curtime()函数
select curtime();//当前时间,格式为 HH:MM:SS
select curdate();//当前日期,格式为 YYYY-MM-DD
week()函数返回指定的日期是一年的第几个星期,而yearweek()函数返回指定的日期是哪一年的哪一个星期
select week('2004-03-01');//结果为9
select yearweek(20040301);//结果为200409
更多日期时间函数,请参考MySQL官方文档
加密函数
MySQL特意设计了一些函数对数据进行加密。
AES_ENCRYPT(str,key);//返回使用密钥key对字符串str利用高级加密标准算法加密后的结果
AES_DECRYPT(str,key); //返回使用密钥key对字符串str利用高级加密标准算法解密后的结果
DECODE(str,key);//使用key作为密钥解密加密字符串str
ENCRYPT(str,salt);//使用UNIX crypt()函数,用关键词salt加密字符串str
ENCODE(str,key);//使用key作为密钥加密字符串str
MD5();//计算字符串str的MD5校验和
PASSWORD(str);//返回字符串str的加密版本
SHA();//计算字符串str的安全散列算法(SHA)校验和
password()函数用来创建一个经过加密的密码字符串,它适合于插入到MySQL的安全系统。这个加密过程是不可以逆转的, 和UNIX密码加密使用不同的算法
如果愿意的话,可以通过ENCRYPT()函数使用UNIX crypt()系统加密字符串,ENCRYPT()函数接收要加密的字符串 和(可选的)用于加密过程的salt(一个可以唯一确定口令的字符串,就像钥匙一样)。
还可以使用ENCODE()函数和DECODE()函数来加密和解密字符串,ENCODE()有两个参数:被加密的字符串和作为加密基础的密钥:
insert into users values('','john',ENCODE('asdfasdf','secret_key'));
select * from users;
select id,uname,DECODE(upass,'secret_key') from users;
控制流函数
MySQL提供了4个函数是用来进行条件操作的。这些函数实现了sql的条件逻辑,允许开发者将一些应用程序业务逻辑转换到 数据库后台。
case where[test1] then[result1] ... else[defalut] end;//如果testN为真,则返回resultN,否则返回default
case[test] where[val1] then[result1]...else[default] end;//如果test和valN为真,则返回resultN,否则返回default
if(test,t,f);//如果test为真,返回t,否则返回f
ifnull(arg1,arg2);//如果arg1不是空,返回arg1,否则返回arg2
nullif(arg1,arg2);//如果arg1=arg2返回null,否则返回arg1
这些函数的第一个是ifnull()函数,它有两个参数,并且对第一个参数进行判断。如果第二个参数不是null, 函数就会向调用者返回第一个参数,如果是null,返回第二个参数。
select ifnull(1,2),ifnull(null,10),ifnull(4*null,'false');//结果为1,10,false
nullif()函数将会检验提供的两个参数是否相等,如果相等,则返回null,不相等,返回第一个参数。
if()函数有三个参数,第一个是要被判断的表达式,如果表达式为真,if()函数会返回第二个参数,为假,返回第三个参数。 if()函数在只有两种结果时才适合使用
格式化函数
MySQL还有一些函数是特意为格式化数据设计的
date_format(date,fmt);//依照字符串fmt格式化日期date的值
format(x,y);//把x格式化为以逗号隔开的数字序列,y是结果的小数位数
inet_aton(ip);//返回ip地址的数字表示
inet_ntoa(num);//返回数字所代表的ip地址
time_format(time,fmt);//依照字符串fmt格式化时间time值
其中最简单的是format()函数,它可以把大的数值格式化为以逗号间隔的易读的序列。format()的第一个参数是被 格式化的数据,第二个参数是结果的小数位数
select format(999999999868595049,2),format(-4512,6);//结果为999,999,999,82;-4.512.000000
更多用法,请查阅相关文档
练习
请把'19920202'按照'yyyy-mm-dd'的形式格式化,格式为'%Y-%m-%d'
数据转换函数
为了进行数据类型转换,MySQL提供了cast()函数,它可以把一个值转化为指定的数据类型
通常情况下,当使用数值操作时,字符串会自动的转化为数字
select 1+'99';//结果为100
select 1+cast('99' as signed);//结果为100
我们可以强制许多日期和时间函数[包括now(),curtime()和curdate()函数],把它们返回的值作为一个数而不是字符串输出 ,只需要在数字的环境中使用这些函数或者把它们转化为数字
select cast(now() as signed integer),curdate()+0;
系统信息函数
MySQL还具有一些特殊的函数用来获得系统本身的信息
database();//返回当前数据库名称
benchmark(count,expr);//将表达式expr重复运行count次
connection_id();//返回当前客户的连接id
found_rows();//将最后一个select查询(没有以limit进行限制结果)返回的记录行数返回
get_lock(str,dur);//获取一个由字符串str命名的并且有dur秒延时的锁定
is_free_lock(str);//检查以str命名的锁定是否释放
last_insert_id();//返回由该系统自动产生的最后一个auto increment id的值
master_pos_wait(log,pos,dur);//锁定主服务器dur秒直到从服务器与主服务器的日志log指定的位置pos同步
release_lock(str);//释放由字符串str命名的锁定
user()/system_user();//返回当前登录用户名
version();//返回MySQL服务器的版本
database(),user()和version()函数分别可以返回当前所选数据库,当前用户和MySQL版本的信息:
select database(),version(),user();