## 一、字符串函数
**函数**|**描述**|**示例**
---|---|---
`ASCII(s)`|返回字符串 s 的第一个字符的 ASCII 码|`SELECT ASCII(字段) AS 新命名 FROM 表名;`
`CHAR_LENGTH(s)`|返回字符串 s 的字符数|`SELECT CHAR_LENGTH(字段) AS 新命名 FROM 表名;`
`CHARACTER_LENGTH(s)`|返回字符串 s 的字符数|`SELECT CHARACTER_LENGTH(字段) AS 新命名 FROM 表名;`
`CONCAT_WS(x,s1,s2...sn)`|同 CONCAT(s1,s2,...) 函数一样,但是每个字符串之间要加上 x,x 可以是分隔符|`SELECT CONCAT_WS('-',字段,字段) AS 新命名 FROM 表名;`
`FIELD(s,s1,s2...)`|返回第一个字符串 s 在字符串列表(s1,s2...)中的位置|`SELECT FIELD("c", "a", "b", "c", "d", "e");`
`FIND_IN_SET(s1,s2)`|返回在字符串s2中与s1匹配的字符串的位置|`SELECT FIND_IN_SET("c", "a,b,c,d,e");`
`FORMAT(x,n)`|函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入|`SELECT FORMAT(250500.5634, 2);`
`INSERT(s1,x,len,s2)`|字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串|`SELECT INSERT("ouyangke", 1, 6, "huangrong");`
`LOCATE(s1,s)`|从字符串 s 中获取 s1 的开始位置|`SELECT LOCATE('yan','ouyangke');`
`LCASE(s)`|将字符串 s 的所有字母变成小写字母|`SELECT LCASE('OUYANGKE')`
`LEFT(s,n)`|返回字符串 s 的前 n 个字符|`SELECT LEFT('ouyangke',2)`
`LOWER(s)`|将字符串 s 的所有字母变成小写字母|`SELECT LOWER('OUYANGKE')`
`LTRIM(s)`|去掉字符串 s 开始处的空格|`SELECT LTRIM(" ouyangke") AS new_name;`
`MID(s,n,length)`|从字符串 s 的 start 位置截取长度为 length 的子字符串,同 SUBSTRING(s,n,length)|`SELECT MID("ouyangke", 2, 3) AS new_name;`
`POSITION(s1 IN s)`|从字符串 s 中获取 s1 的开始位置|`SELECT POSITION('y' in 'ouyangke');`
`REPEAT(s,n)`|将字符串 s 重复 n 次|`SELECT REPEAT('ouyangke',3);`
`REPLACE(s,s1,s2)`|将字符串 s2 替代字符串 s 中的字符串 s1|`SELECT REPLACE('ouyangke','ke','feng');`
`REVERSE(s)`|将字符串s的顺序反过来|`SELECT REVERSE('ouyangke');`
`RIGHT(s,n)`|返回字符串 s 的后 n 个字符|`SELECT RIGHT('ouyangke',2);`
`RPAD(s1,len,s2)`|在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len|`SELECT RPAD('ouyangke',10,'huangrong');`
`RTRIM(s)`|去掉字符串 s 结尾处的空格|`SELECT RTRIM("ouyangke ") AS new_name;`
`SPACE(n)`|返回 n 个空格|`SELECT SPACE(10)`
`STRCMP(s1,s2)`|比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1 < s2 返回 -1|`SELECT STRCMP("ouyangke", "huangrong");`
`SUBSTR(s, start, length)`|从字符串 s 的 start 位置截取长度为 length 的子字符串|`SELECT SUBSTR("ouyangke", 2, 3) AS new_name;`
`SUBSTRING(s, start, length)`|从字符串 s 的 start 位置截取长度为 length 的子字符串|`SELECT SUBSTRING("ouyangke", 2, 3) AS new_name;`
`SUBSTRING_INDEX(s, delimiter, number)`|返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。如果 number 是正数,返回第 number 个字符左边的字符串。如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。|`SELECT SUBSTRING_INDEX('a*b','*',1);`
`TRIM(s)`|去掉字符串 s 开始和结尾处的空格|`SELECT TRIM(' ouyangke ') AS new_name;`
`UCASE(s)`|将字符串转换为大写|`SELECT UCASE("ouyangke");`
`UPPER(s)`|将字符串转换为大写|`SELECT UPPER("ouyangke");`
## 二、数字函数
**函数**|**描述**|**示例**
---|---|---
`ABS(x)`|返回 x 的绝对值|`SELECT ABS(-1);`
`ACOS(x)`|求 x 的反余弦值(参数是弧度)|`SELECT ACOS(0.25);`
`ASIN(x)`|求反正弦值(参数是弧度)|`SELECT ASIN(0.25);`
`ATAN(x)`|求反正切值(参数是弧度)|`SELECT ATAN(2.5);`
`ATAN2(n, m)`|求反正切值(参数是弧度)|`SELECT ATAN2(-0.8, 2);`
`AVG(expression)`|返回一个表达式的平均值,expression 是一个字段|`SELECT AVG(Price) AS AveragePrice FROM Products;`
`CEIL(x)`|返回大于或等于 x 的最小整数|`SELECT CEIL(1.5);`
`CEILING(x)`|返回大于或等于 x 的最小整数|`SELECT CEILING(1.5);`
`COS(x)`|求余弦值(参数是弧度)|`SELECT COS(2);`
`COT(x)`|求余切值(参数是弧度)|`SELECT COT(2);`
`COUNT(expression)`|返回查询的记录总数,expression 参数是一个字段或者 * 号|`SELECT COUNT(name) AS new_name FROM user;`
`DEGREES(x)`|将弧度转换为角度|`SELECT DEGREES(3.1415926535898);`
`n DIV m`|整除,n 为被除数,m 为除数|`SELECT 10 DIV 5;`
`EXP(x)`|返回 e 的 x 次方|`SELECT EXP(3);`
`FLOOR(x)`|返回小于或等于 x 的最大整数|`SELECT FLOOR(1.5);`
`GREATEST(expr1, expr2, expr3, ...)`|返回列表中的最大值|`ELECT GREATEST(3, 12, 34, 8, 25);`
`LEAST(expr1, expr2, expr3, ...)`|返回列表中的最小值|`SELECT LEAST(3, 12, 34, 8, 25);`
`LN`|返回数字的自然对数|`SELECT LN(2);`
`LOG(x)`|返回自然对数(以 e 为底的对数)|`SELECT LOG(20.085536923188);`
`LN`|返回数字的自然对数|`SELECT LN(2);`
`LOG10(x)`|返回以 10 为底的对数|`SELECT LOG10(100);`
`LOG2(x)`|返回以 2 为底的对数|`SELECT LOG2(6);`
`MAX(expression)`|返回字段 expression 中的最大值|`SELECT MAX(age) AS new_name FROM user;`
`MIN(expression)`|返回字段 expression 中的最大值|`SELECT MIN(age) AS new_name FROM user;`
`MOD(x,y)`|返回 x 除以 y 以后的余数|`SELECT MOD(5,2);`
`PI()`|返回圆周率(3.141593)|`SELECT PI();`
`POW(x,y)`|返回圆周率(3.141593)|`SELECT POW(2,3);`
`POWER(x,y)`|返回 x 的 y 次方|`SELECT POWER(2,3);`
`RADIANS(x)`|将角度转换为弧度|`SELECT RADIANS(180);`
`RAND()`|返回 0 到 1 的随机数|`SELECT RAND();`
`ROUND(x)`|返回离 x 最近的整数|`SELECT ROUND(1.23456);`
`SIGN(x)`|返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1|`SELECT SIGN(-10);`
`SIN(x)`|求正弦值(参数是弧度)|`SELECT SIN(RADIANS(30));`
`SQRT(x)`|返回x的平方根|`SELECT SQRT(25);`
`SUM(expression)`|返回指定字段的总和|`SELECT SUM(age) AS new_name FROM user;`
`TAN(x)`|求正切值(参数是弧度)|`SELECT TAN(1.75);`
`TRUNCATE(x,y)`|返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)|`SELECT TRUNCATE(1.23456,3);`
## 三、日期函数
**函数**|**描述**|**示例**
---|---|---
`ADDDATE(d,n)`|计算起始日期 d 加上 n 天的日期|`SELECT ADDDATE("2019-10-10", INTERVAL 10 DAY);`
`ADDTIME(t,n)`|时间 t 加上 n 秒的时间|`SELECT ADDTIME('2019-11-11 11:11:11', 5);`
`CURDATE()`|返回当前日期|`SELECT CURDATE();`
`CURRENT_DATE()`|返回当前日期|`SELECT CURRENT_DATE();`
`CURRENT_TIME()`|返回当前日期|`SELECT CURRENT_TIME();`
`CURRENT_TIMESTAMP()`|返回当前日期|`SELECT CURRENT_TIMESTAMP();`
`CURTIME()`|返回当前日期|`SELECT CURTIME();`
`DATE()`|返回当前日期|`SELECT DATE("2019-10-10 12:12:12");`
`DATEDIFF(d1,d2)`|计算日期 d1->d2 之间相隔的天数|`SELECT DATEDIFF('2019-01-01','2019-10-10');`
`DATE_ADD(d,INTERVAL expr type)`|计算起始日期 d 加上一个时间段后的日期|`SELECT ADDDATE('2019-11-11 11:11:11',1);`
`DATE_FORMAT(d,f)`|按表达式 f的要求显示日期 d|`SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r');`
`DATE_SUB(date,INTERVAL expr type)`|函数从日期减去指定的时间间隔|`SELECT DATE_SUB(age,INTERVAL 2 DAY) AS new_name FROM user;`
`DAY(d)`|返回日期值 d 的日期部分|`SELECT DAY("2019-10-15");`
`DAYNAME(d)`|返回日期 d 是星期几|`SELECT DAYNAME("2019-10-15 12:12:12");`
`DAYOFMONTH(d)`|计算日期 d 是本月的第几天|`SELECT DAYOFMONTH("2019-10-15 12:12:12");`
`DAYOFWEEK(d)`|日期 d 今天是星期几|`SELECT DAYOFWEEK("2019-10-15 12:12:12");`
`DAYOFYEAR(d)`|计算日期 d 是本年的第几天|`SELECT DAYOFYEAR("2019-10-15 12:12:12");`
`EXTRACT(type FROM d)`|从日期 d 中获取指定的值,type 指定返回的值|`SELECT EXTRACT(MINUTE FROM '2019-10-15 12:12:12');`
`FROM_DAYS(n)`|计算从 0000 年 1 月 1 日开始 n 天后的日期|`SELECT FROM_DAYS(1111);`
`HOUR(t)`|返回 t 中的小时值|`SELECT HOUR('11:12:13');`
`LAST_DAY(d)`|返回给给定日期的那一月份的最后一天|`SELECT LAST_DAY("2017-06-20");`
`LOCALTIME()`|返回当前日期和时间|`SELECT LOCALTIME();`
`LOCALTIMESTAMP()`|返回当前日期和时间|`SELECT LOCALTIMESTAMP();`
`MAKEDATE(year, day-of-year)`|返回当前日期和时间|`SELECT LOCALTIMESTAMP();`
`MAKETIME(hour, minute, second)`|组合时间,参数分别为小时、分钟、秒|`SELECT MAKETIME(11, 35, 4);`
`MICROSECOND(date)`|返回日期参数所对应的微秒数|`SELECT MICROSECOND("2019-10-10 12:12:12.000023");`
`MINUTE(t)`|返回 t 中的分钟值|`SELECT MINUTE('11:12:13');`
`MONTHNAME(d)`|返回日期当中的月份名称|`SELECT MONTHNAME('2019-11-11 11:11:11');`
`MONTH(d)`|返回日期d中的月份值,1 到 12|`SELECT MONTH('2019-11-11 11:11:11');`
`NOW()`|返回当前日期和时间|`SELECT NOW();`
`PERIOD_ADD(period, number)`|为 年-月 组合日期添加一个时段|`SELECT PERIOD_ADD(201903, 5);`
`PERIOD_DIFF(period1, period2)`|返回两个时段之间的月份差值|`SELECT PERIOD_DIFF(201910, 201903);`
`QUARTER(d)`|返回日期d是第几季节,返回 1 到 4|`SELECT QUARTER('2019-11-11 11:11:11');`
`SECOND(t)`|返回 t 中的秒钟值|`SELECT SECOND('11:12:13');`
`SEC_TO_TIME(s)`|将以秒为单位的时间 s 转换为时分秒的格式|`SELECT SEC_TO_TIME(4320);`
`STR_TO_DATE(string, format_mask)`|将字符串转变为日期|`SELECT STR_TO_DATE("August 10 2019", "%M %d %Y");`
`SUBDATE(d,n)`|日期 d 减去 n 天后的日期|`SELECT SUBDATE('2019-11-11 11:11:11', 1);`
`SUBTIME(t,n)`|时间 t 减去 n 秒的时间|`SELECT SUBTIME('2019-11-11 11:11:11', 5);`
`SYSDATE()`|返回当前日期和时间|`SELECT SYSDATE();`
`TIME(expression)`|提取传入表达式的时间部分|`SELECT TIME("19:30:10");`
`TIME_FORMAT(t,f)`|按表达式 f 的要求显示时间 t|`SELECT TIME_FORMAT('11:11:11','%r');`
`TIME_TO_SEC(t)`|将时间 t 转换为秒|`SELECT TIME_TO_SEC('1:12:00');`
`TIMEDIFF(time1, time2)`|计算时间差值|`SELECT TIMEDIFF("13:10:11", "13:10:10");`
`TIMESTAMP(expression, interval)`|单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和|`SELECT TIMESTAMP("2019-10-10", "11:11:11");`
`TO_DAYS(d)`|计算日期 d 距离 0000 年 1 月 1 日的天数|`SELECT TO_DAYS('0001-01-01 01:01:01');`
`WEEK(d)`|计算日期 d 是本年的第几个星期,范围是 0 到 53|`SELECT WEEK('2019-11-11 11:11:11');`
`WEEKDAY(d)`|日期 d 是星期几,0 表示星期一,1 表示星期二|`SELECT WEEKDAY("2019-06-15");`
`WEEKOFYEAR(d)`|计算日期 d 是本年的第几个星期,范围是 0 到 53|`SELECT WEEKOFYEAR('2019-11-11 11:11:11');`
`YEAR(d)`|返回年份|`SELECT YEAR("2019-06-15");`
`YEARWEEK(date, mode)`|返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推|`SELECT YEARWEEK("2019-10-10");`
## 四、高级函数
**函数**|**描述**|**示例**
---|---|---
`BIN(x)`|返回 x 的二进制编码|`SELECT BIN(15);`
`BINARY(s)`|将字符串 s 转换为二进制字符串|`SELECT BINARY "ouyangke";`
`CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END`|CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了|`SELECT CASE WHEN 1 > 0 THEN '1 > 0' WHEN 2 > 0 THEN '2 > 0' ELSE '3 > 0' END`
`CAST(x AS type)`|转换数据类型|`SELECT CAST("2019-10-10" AS DATE);`
`COALESCE(expr1, expr2, ...., expr_n)`|返回参数中的第一个非空表达式(从左向右)|`SELECT COALESCE(NULL, NULL, NULL, 'ouyangke', NULL, 'huangrong');`
`CONNECTION_ID()`|返回服务器的连接数|`SELECT CONNECTION_ID();`
`CONV(x,f1,f2)`|返回 f1 进制数变成 f2 进制数|`SELECT CONV(15,10,2);`
`CONVERT(s USING cs)`|函数将字符串 s 的字符集变成 cs|`SELECT CHARSET(CONVERT('ABC' USING gbk));`
`CURRENT_USER()`|返回当前用户|`SELECT CURRENT_USER();`
`DATABASE()`|返回当前数据库名|`SELECT DATABASE();`
`IF(expr,v1,v2)`|如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2|`SELECT IF(1 > 0,'正确','错误');`
`IFNULL(v1,v2)`|如果 v1 的值不为 NULL,则返回 v1,否则返回 v2|`SELECT IFNULL(null,'Hello Word');`
`ISNULL(expression)`|判断表达式是否为 NULL|`SELECT ISNULL(NULL);`
`LAST_INSERT_ID()`|返回最近生成的 AUTO_INCREMENT 值|`SELECT LAST_INSERT_ID();`
`NULLIF(expr1, expr2)`|比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1|`SELECT NULLIF(25, 25);`
`SESSION_USER()`|返回当前用户|`SELECT SESSION_USER();`
`SYSTEM_USER()`|返回当前用户|`SELECT SYSTEM_USER();`
`USER()`|返回当前用户|`SELECT USER();`
`VERSION()`|返回数据库的版本号|`SELECT VERSION();`
- 序言
- PHP基础
- 认识PHP
- 环境安装
- PHP语法
- 流程控制
- PHP数组
- PHP函数
- PHP类与对象
- PHP命名空间
- PHP7新特性
- PHP方法库
- PHP交互
- 前后端交互
- 项目常规开发流程
- MySQL数据库
- 会话控制
- Ajax分页技术
- 细说函数
- 类与对象
- 对象进阶
- 类与对象进阶
- OOP面向对象
- 设计模式
- 路由与模板引擎
- 异常类
- PHP爬虫
- PHP抓取函数
- PHP匹配函数
- 正则表达式
- PHP字符串函数
- 抓取实战
- PHP接口
- 了解接口
- PHP插件
- PHPSpreadsheet
- ThinkPHP6
- 安装
- 架构
- 数据库
- 数据库操作
- 视图
- 模版
- 模型
- 杂项
- 命令行
- 交互
- 微信小程序
- 介绍
- 配置
- 组件
- 交互
- API
- 其他知识
- 百度小程序
- 介绍
- 配置
- 组件
- 交互
- API
- 其他知识
- Linux
- 服务器上线流程
- 安装svn
- MySQL
- 认识MySQL
- MySQL函数
- 杂项
- composer依赖管理工具