一、函数的理解
1.1什么是函数
函数在计算机语言使用中贯穿始终,函数的作用是可以把我们经常使用的代码封装起来,需要的时候调用即可,这样==提高了代码的效率==而且==提高了可维护性==。在SQL中我们也可以使用函数对检索出来的数据进行函数操作,使用这些函数,可以极大的==提高用户对数据库的管理效率==
从函数的定义角度出发,函数可以分成==内置函数==,==自定义函数==
1.2不同的DBMS函数的差异
DBMS之间的差异很大,远大于同一个语言不同版本之间的差异。实际上很少的函数被DBMS同时支持的。大部分DBMS会有自己特定的函数,这意味着采用SQL函数的代码可移植性很差,因此在使用函数的时候需要特别注意。
1.3MySQL的内置函数及分类
MySQL提供了丰富的内置函数,从实现功能的角度来看可以分为:
- 数值函数
- 字符串函数
- 日期和时间函数
- 流程控制函数
- 加密与解密函数
- 获取MySQL信息函数
- 聚合函数等 可以将这些丰富的内置函数再分为两类:单行函数和聚合函数(分组函数)
二、数值函数
函数 | 用法 |
---|---|
ABS(X) | 返回X的绝对值 |
SIGN(X) | 返回X的符号,正数返回1,复数返回-1,0返回0 |
PI() | 返回圆周率的值 |
CEIL(X) | 返回大于或等于某个值的最小整数 |
FLOOR(X) | 返回小于或等于某个值的最大整数 |
LEAST(X1,X2,X3) | 返回列表中的最小值 |
GREATEST(X1,X2,X3) | 返回列表中最大值 |
MOD(X,Y) | 返回X除以Y以后的余数 |
RAND() | 返回0~1的随机值 |
RAND(X) | 返回0~1的随机值,其中X的值作种子值,相同的X值会产生相同的随机数 |
ROUND(X) | 返回一个对X的值进行四舍五入后,最接近于X的整数 |
ROUND(X,Y) | 返回一个对X的值进行四舍五入后最接近X的值,并保留到小数点后面Y位 |
TRUNCATE(X,Y) | 返回数字X截断为Y位小数的结果 |
SQRT(X) | 返回X的平方根,当X的值为负数时,返回NULL |
- 简单举例
- ABS(X)函数
- CEIL(X)函数 FLOOR(X)函数,和CEIL用法刚好相反 MOD(X,Y)返回X/Y的模 和x%y的结果相同,如果被模数和模数任何一个为NULL结果都为NULL RAND()返回0~1的随机值 ROUND(X,Y)函数:返回参数X的四舍五入的有Y位小数的值 如果是整数,将会保留Y位数量0;如果不写y则默认y为0,即将x四舍五入后取整
TRUNCATE(X,Y)函数:返回数字X截断为Y位小数的结果
仅仅只是截断而不是四舍五入
三、字符串函数
函数 | 功能 |
---|---|
CONCAT(x1,x2,xn...) | 连接x1,x2,xn为一个字符串 |
INSERT(str,x,y,instr) | 将字符串从第X位置开始,Y个字符长的子串替换为字符串instr |
LOWER(str) | 将字符串str中全转为小写 |
UPPER(str) | 将字符串str中全转为大写 |
LEFT(str,x) | 返回字符串str最左边的x个字符 |
RIGHT(str,x) | 返回字符串str最右边的x个字符 |
LPAD(str,n,pad) | 用字符串对左边填充,直到长度为N个字符长度 |
RPAD(str,n,pad) | 用字符串对右边填充,直到长度为N个字符长度 |
LTRIN(str) | 去掉字符串str左边空格 |
RTRIM(str) | 去掉字符串srt右边空格 |
REPEAT(str,x) | 返回str重复x次结果 |
REPLACE(str,a,b) | 用字符串b替换字符串str中出现所有的字符串a |
STRCMP(x1,x2) | 比较字符串x1和x2 |
TRIM(str) | 去掉行尾和行头空格 |
SUBSTRING(str,y) | 返回从字符串str x 位置起y个字符长度的字串 |
- 示范 |CONCAT(x1,x2,xn...)|连接x1,x2,xn为一个字符串| ==如果加入NULL的话结果都将会是NULL== |INSERT(str,x,y,instr)|将字符串从第X位置开始,Y个字符长的子串替换为字符串instr| |LOWER(str)|将字符串str中全转为小写| |UPPER(str)|将字符串str中全转为大写| |LEFT(str,x)|返回字符串str最左边的x个字符| |RIGHT(str,x)|返回字符串str最右边的x个字符| ==如果第二个参数是NULL则返回NULL== |LPAD(str,n,pad)|用字符串对左边填充,直到长度为N个字符长度| |RPAD(str,n,pad)|用字符串对右边填充,直到长度为N个字符长度| |LTRIN(str)|去掉字符串str左边空格| |RTRIM(str)|去掉字符串右边空格| |REPEAT(str,x)|返回str重复x次结果| |REPLACE(str,a,b)|用字符串b替换字符串str中出现所有的字符串a| 用2000替换掉字符串中的2001 |STRCMP(x1,x2)|比较字符串x1和x2| 如果S1比S2小返回-1.如果相等返回0,如果S1大于S2返回1 |TRIM(str)|去掉行尾和行头空格| |SUBSTRING(str,x,y)|返回从字符串str x 位置起y个字符长度的字串|
四、日期和时间函数
函数 | 功能 |
---|---|
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前的日期和时间 |
UNIX_TIMESTAMP(date) | 返回日期date的UNIX时间戳 |
FROM_UNIXTIME | 返回UNIX时间戳的日期值 |
WEEK(date) | 返回日期date为一年中的第几周 |
YEAR(date) | 返回日期date的年份 |
HOUR(time) | 返回time的小时值 |
MINUTE(time) | 返回time的分钟值 |
MONTHNAME(date,fmt) | 返回date的月份名 |
DATE_FORMAT(date,fmt) | 返回按字符串fmt格式化日期date值 |
DATE_ADD(date,INTERVAL expr type) | 返回一个日期或时间值加上一个时间间隔的时间值 |
DATEDIFF(expr,expr2) | 返回起始时间expr和结束时间expr2之间的天数 |
- 举例 |CURDATE()|返回当前日期| |CURTIME()|返回当前时间| |NOW()|返回当前的日期和时间|
|UNIX_TIMESTAMP(date)|返回日期date的UNIX时间戳|
Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒