单行函数

字符函数

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值