字符函数
length(s)
获取参数值的字符个数
SELECT LENGTH('john');
SELECT LENGTH('张三丰hahaha');//result:15 mysql中使用的UTF-8 中文占三个字节
CONCAT(s1,s2…sn)
拼接字符串
SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
UPPER(s)转化成大写
LOWER(s)转化为小写
示例:将姓变大写,名变小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;//函数嵌套函数
SUBSTR(s, start, length)、SUBSTRING()
SUBSTR(s, start, length):从字符串 s 的 start 位置截取长度为 length 的子字符串,它有四个重载方法
截取字符串(注意:索引从1开始)
SELECT SUBSTR('李莫愁爱上了陆展元',7) out_put;
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;
案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
SELECT CONCAT(UPPER(SUBSTR(`last_name`,1,1)),"_",LOWER(SUBSTR(last_name,2)))
FROM `employees
INSTR(s,s)
返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;
TRIM(s)
LTRIM(s):去掉字符串 s 开始处的空格
RTRIM(s):去掉字符串 s 结尾处的空格
去掉字符串开始和结尾处的空格
SELECT LENGTH(TRIM(' 张翠山 ')) AS out_put;
去掉左右两边特定的字符
SELECT TRIM("a" FROM "aaababaaa") out_put//result:bab
LPAD(s1,len,s2)
在字符串 s1 的开始
处填充字符串 s2,使字符串长度达到 len
如果长度小于原字符串,则只取前len个字符
SELECT LPAD('殷素素',5,'*') AS out_put; //result: **殷素素
RPAD(s1,len,s2)
同LPAD,只是左边改成了右边
REPLACE(str,str1,str2)
将str中的str1都修改成str2
SELECT REPLACE("张无忌爱上了周芷若","周芷若","赵敏") AS 渣男;
数学函数
ROUND(x)
四舍五入
round(1.1)—>1
round(-10.9)—>-11
SELECT ROUND(1.567,2); --> 1.57 //可以设置保留几位小数
CEIL(x) 向上取整
FLOOR(x)向下取整
TRUNCATE(x,y)
SELECT TRUNCATE (1.117,2)—>1.11
仅仅保留小数,不会进行取整
MOD(x,y)取余
取余的数学方法:
a-a/b*b(注意:这里的除和java中的除是一样的)
日期函数
SELECT NOW(),CURDATE(),CURTIME()
YEAR(d)
SELECT YEAR(NOW()); -->2020
还有类似的MONTH(d)和DAY(d)
STR_TO_DATE(s, f)
将字符通过指定的格式转换成日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put; --> 1998-03-02
只有四位数的年需要大写
查询入职日期为1992-4-3的员工信息
SELECT * FROM employees WHERE hiredate = '1992-4-3';
# 或者
SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');
DATE_FORMAT(d,f)
将日期通过指定的格式转换成字符
SELECT date_format(now(),"%y年%m月%d日")
-->20年01月18日
查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;
其他函数
VERSION():返回数据库的版本号
DATABASE():返回当前数据库名
USER():返回当前用户
流程控制函数
IF(expr,v1,v2)
如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
SELECT IF(1 > 0,'正确','错误'); --> 正确
SELECT
last_name,
commission_pct,
IF
( commission_pct IS NULL, '没奖金,呵呵', '有奖金,嘻嘻' ) 备注
FROM
employees;
CASE
CASE expression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。
案例
查询员工的工资,要求
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;