亲宝软件园·资讯

展开

MySQL之函数

♛素心♛ 人气:1
[TOC] # 数学函数 | 函数 | 作用 | | :------------------: | :----------------------------------------: | | ABS(x) | 返回X的绝对值 | | CEIL(x), CEILNG(x) | 返回大于或者等于x的最小整数 | | FLOOR(x) | 返回小于或者等于x的最大整数 | | RAND() | 返回0~1的随机数 | | RAND(x) | 返回0~1的随机数,x值相同时返回的随机数相同 | | SING(x) | 返回x的符号,x是负数还是0还是正数 | | PI() | 返回圆周率 | | TRUNCATE(x,y) | 返回数值x保留到小数点y位的值 | | ROUND(x) | 返回离x最近的整数 | | ROUND(x,y) | 保留x小数点y位,但截断时要进行四舍五入 | | POW(x,y),POWER(x,y) | 返回x的y次方(x^y) | | SQRT(x) | 返回x的平方根 | | EXP(x) | 返回e的x次方(e^x) | | MOD(x,y) | 返回x除以y的余数 | | LOG(x) | 返回自然对数(以e为底的对数) | | LOG10(x) | 返回以10为底的对数 | | RADIANS(x) | 将角度转换成弧度 | | DEGREES(x) | 将弧度转换为角度 | | SIN(x) | 求正弦值 | | ASIN(x) | 求反正弦值 | | COS(x) | 求余弦值 | | ACOS(x) | 求反余弦值 | | TAN(x) | 求正切值 | | ATAN(x),ATAN2(x) | 求反正切值 | | COT(x) | 求余切值 | ```sql select abs(-100),pi(); /* +-----------+----------+ | abs(-100) | pi() | +-----------+----------+ | 100 | 3.141593 | +-----------+----------+ */ select sqrt(16), mod(3,2); /* +----------+----------+ | sqrt(16) | mod(3,2) | +----------+----------+ | 4 | 1 | +----------+----------+ */ select ceil(8.9), floor(8.9); /* +-----------+------------+ | ceil(8.9) | floor(8.9) | +-----------+------------+ | 9 | 8 | +-----------+------------+ */ ``` # 字符串函数 | 函数 | 作用 | | :--------------------------------------------: | :-------------------------------------------: | | CHAR_LENGTH(s) | 返回字符串s的字符数 | | LENGTH(s) | 返回字符串s的长度 | | CONCAT(s1, s2, ...) | 将字符串s1,s2等多个字符串合并为一个字符串 | | CONCAT_WS(x,s1,s2,...) | 同上,但是在每个字符串直接要加上x | | INSERT(s1, x, len, s2) | 将字符串s2替换s1的x位置开始长度为len的字符串 | | UPPER(s),UCASE(s) | 将字符串s所有字母都变成大写字母 | | LOWER(s),LCASE(s) | 将字符串s所有字母都变成小写字母 | | LEFT(s,n) | 返回字符串s的前n个字符 | | RIGHT(s,n) | 返回字符串s的后n个字符 | | LPAD(s1, len, s2) | 字符串s2来填充s1的开始处,使字符串长度达到len | | RPAD(s1, len, s2) | 字符串s2来填充s1的末尾处,使字符串长度达到len | | LTRIM(s) | 去掉字符串s开始处的空格 | | RTRIM(s) | 去掉字符串s结尾处的空格 | | TRIM(s) | 去掉字符串s开始和结尾处的空格 | | TRIM(s1 from s) | 去掉字符串s中开始和结尾处的字符串s1 | | REPEAT(s,n) | 将祖父穿s重复n次 | | SPACE(n) | 返回n个空格 | | REPLACE(s,s1,s2) | 用字符串s2替代字符串s中的字符串s1 | | STRMP(s1,s2) | 比较字符串s1和s2 | | SUBSTRING(s, n, len),MID(s, n, len) | 获取字符串s中的n个位置开始长度为len的字符串 | | LOCATE(s1, s),POSTION(s1, IN s),INSTR(s, s1) | 从字符串s获取s1的开始位置 | | REVERSE(s) | 反转字符串s | | ELT(n, s1, s2, ...) | 返回第n个字符串 | ```sql select concat('sha', 'ng', 'hai'), concat_ws('-','sha', 'ng', 'hai'); /* +----------------------------+-----------------------------------+ | concat('sha', 'ng', 'hai') | concat_ws('-','sha', 'ng', 'hai') | +----------------------------+-----------------------------------+ | shanghai | sha-ng-hai | +----------------------------+-----------------------------------+ */ select insert('shanghai', 6, 3, 'mian'); /* +----------------------------------+ | insert('shanghai', 6, 3, 'mian') | +----------------------------------+ | shangmian | +----------------------------------+ */ select upper('mysql'), lower('MYSQL'); /* +----------------+----------------+ | upper('mysql') | lower('MYSQL') | +----------------+----------------+ | MYSQL | mysql | +----------------+----------------+ */ select reverse('abcdefg'); /* +--------------------+ | reverse('abcdefg') | +--------------------+ | gfedcba | +--------------------+ */ ``` # 日期和时间函数 | 函数 | 作用 | | :----------------------------------------------------------: | :---------------------------------------------: | | CURDATE(), CURRENT_DATE() | 返回当前日期 | | CURTIME(), CURRENT_TIME() | 返回当前时间 | | NOW(), CURRENT_TIMESTAMP(), LOCALTIME(), SYSDATE(), LOCALTIMESTAMP() | 返回当前时间和日期 | | UNIX_TIMESTAMP() | 以unix时间戳的形式返回当前时间 | | UNIX_TIMESTAMP(D) | 将时间D以unix时间戳的形式返回 | | FROM-UNIXTIME(D) | 把unix时间戳转换为普通格式的时间 | | UTC_DATE() | 返回UTC日期 | | UTC_TIME() | 返回UTC时间 | | MONTH(d) | 返回日期d中的月份值 | | MONTHNAME(d) | 返回日期d中的月份名称 | | DAYNAME(d) | 返回日期d是星期几 | | DAYOFWEEK(d) | 返回日期d是星期几,1表示星期日 | | WEEKDAY(d) | 返回日期d是星期几,0表示星期一 | | WEEK(d) | 计算日期d是本年的第几个星期,范围是0~53 | | WEEKOFYEAR(d) | 计算日期d是本年的第几个星期,范围是1~53 | | DAYOFYEAR(d) | 计算日期d是本年的第几天 | | DAYOFMONTH(d) | 计算日期d是本月的第几天 | | YEAR(d) | 返回日期d中的年份值 | | QUARTER(d) | 返回日期d是第几季度,范围是1~4 | | HOUR(t) | 返回时间t中的小时值 | | MINUTE(t) | 返回时间t中的分钟值 | | SECOND(t) | 返回时间t中的秒钟值 | | EXTRACT(type FROM d) | 从日期d中获取指定的值,type指定返回的值,如year | | TIME_TO_SEC(t) | 将时间转换成秒 | | SEC_TO_TIME(t) | 将秒为时间单位的s转换成时分秒的格式 | | TO_DAYS(d) | 计算日期d~0000年1月1日的天数 | | FROM_DAYS(n) | 计算日期从0000年1月1日开始n天后的日期 | | DATEDIFF(d1, d2) | 计算日期d1~d2之间相隔的天数 | | ADDDATE(d, n), | 计算起始日期d加n天后的日期 | | ADDDATE(d, INTERVAL, expr type),DATE_ADD(d, INTERVAL, expr type) | 计算起始日期d加上一个时间段后的日期 | | SUBDATE(d, n) | 计算起始日期d减去n天的日期 | | SUBDATE(d, INTERVAL, expr type) | 计算起始日期d减去一个时间段后的日期 | | ADDTIME(t, n) | 计算起始时间t加上n秒的时间 | | SUBTIME(t, n) | 计算起始时间t减去上n秒的时间 | | DATE_FROMAT(d, f) | 按照表达式f的要求显示日期d | | TIME_FROMAT(t, f) | 按照表达式f的要求显示时间t | | GET_FROMAT(type, s) | 根据字符串s获取type类型数据的显示格式 | ```sql select curdate(), current_time(), now(); /* +------------+----------------+---------------------+ | curdate() | current_time() | now() | +------------+----------------+---------------------+ | 2020-03-28 | 11:04:01 | 2020-03-28 11:04:01 | +------------+----------------+---------------------+ */ select month('2015-09-28 00:43:12'); /* +------------------------------+ | month('2015-09-28 00:43:12') | +------------------------------+ | 9 | +------------------------------+ */ ``` # 条件判断函数 用于比较或者流程控制 ## if 语法:`if(exp, v1, v2)` ```sql select id,name,age,if(age > 18, '成年了', '未成年') from employee; /* +----+--------+------+----------------------------------------+ | id | name | age | if(age > 18, '成年了', '未成年') | +----+--------+------+----------------------------------------+ | 1 | 刘备 | 26 | 成年了 | | 2 | 孙权 | 15 | 未成年 | | 3 | 曹操 | 25 | 成年了 | | 4 | 大乔 | 12 | 未成年 | | 5 | 孔明 | 15 | 未成年 | +----+--------+------+----------------------------------------+ */ ``` ## ifnull 语法:`ifnull (v1, v2)` ```sql select id,name,address,ifnull(address, '地址不详') from employee; /* +----+--------+---------+---------------------------------+ | id | name | address | ifnull(address, '地址不详') | +----+--------+---------+---------------------------------+ | 1 | 刘备 | 西蜀 | 西蜀 | | 2 | 孙权 | 东吴 | 东吴 | | 3 | 曹操 | 许昌 | 许昌 | | 4 | 大乔 | 东吴 | 东吴 | | 5 | 孔明 | NULL | 地址不详 | +----+--------+---------+---------------------------------+ */ ``` ## case ### 第一种 语法:`case when exp1 then v1 [when expr2 then v2] ... else vn end` ```sql select id,name,case when age > 12 then '小学生' when age > 18 then '成年' else '未成年' end from employee; /* +----+--------+--------------------------------------------------------------------------------------+ | id | name | case when age > 12 then '小学生' when age > 18 then '成年' else '未成年' end | +----+--------+--------------------------------------------------------------------------------------+ | 1 | 刘备 | 小学生 | | 2 | 孙权 | 小学生 | | 3 | 曹操 | 小学生 | | 4 | 大乔 | 未成年 | | 5 | 孔明 | 小学生 | +----+--------+--------------------------------------------------------------------------------------+ */ select id,name,case when age > 12 then '小学生' else '未成年' end as '年龄阶段' from employee; /* +----+--------+--------------+ | id | name | 年龄阶段 | +----+--------+--------------+ | 1 | 刘备 | 小学生 | | 2 | 孙权 | 小学生 | | 3 | 曹操 | 小学生 | | 4 | 大乔 | 未成年 | | 5 | 孔明 | 小学生 | +----+--------+--------------+ */ ``` ### 第二种 语法:`case expr1 when e1 then v1 [when e2 then v2] ... else vn end` # 系统信息 | 函数 | 作用 | | :---------------------------------: | :----------------------------: | | VERSION() | 返回数据库的版本号 | | CONNECTION_ID() | 返回服务器的连接数 | | DATABASE(), SCHEMA() | 返回当前数据库名 | | USER(), STSTEM_USER, SESSION_USER() | 返回当前用户 | | CURRENT_USER(), CURRENT_USER | 返回当前用户 | | CHARSET(str) | 返回字符串的str的字符集 | | COLLATION(str) | 返回字符串str的字符排列方式 | | LAST_INSERT_ID() | 返回最近生产的auto_increment值 | ![](https://s1.ax1x.com/2020/03/28/GkPPat.png) ![](https://s1.ax1x.com/2020/03/28/GkPKZn.png) # 加密函数 ## PASSWORD() ![](https://s1.ax1x.com/2020/03/28/GkiVFx.png) ## MD5() ![](https://s1.ax1x.com/2020/03/28/GkF94P.png) ## ENCODE() 语法:`encode(str, pwd_str)` ![](https://s1.ax1x.com/2020/03/28/GkFkjg.png) 如果要存储,则需要存储的字段类型为`blog` ## DECODE() 语法:`decode(str, pwd_str)` ![](https://s1.ax1x.com/2020/03/28/GkF8u4.png) 只能对encode编码之后的字符进行解码 # 其他函数 ## format 语法:`format(x, n)` 对x进行格式化保留n位小数 ```sql select format(3.1415926), format(3.1415926, 1); /* +----------------------+----------------------+ | format(3.1415926, 3) | format(3.1415926, 1) | +----------------------+----------------------+ | 3.142 | 3.1 | +----------------------+----------------------+ */ ``` ## IP地址和数字转换 `inet_aton(ip)` `inet_ntoa(n)` ```sql select inet_aton('192.168.1.1'), inet_ntoa(3232235777); /* +--------------------------+-----------------------+ | inet_aton('192.168.1.1') | inet_ntoa(3232235777) | +--------------------------+-----------------------+ | 3232235777 | 192.168.1.1 | +--------------------------+-----------------------+ */ ``` ## 重复执行指定操作函数 语法:`benchmark(n, expr)` ```sql select benchmark(1000, now()); /* +------------------------+ | benchmark(1000, now()) | +------------------------+ | 0 | +------------------------+ */ ```

加载全部内容

相关教程
猜你喜欢
用户评论