常见函数:
字符函数
length
concat
substr
instr
trim
upper
lower
lpad
rpad
replace
数学函数
round
ceil
floor
truncate
mod
日期函数
now
curdate
curtime
year
month
monthname
day
hour
minute
second
str_to_date
date_formate
其他函数
version
database
user
控制函数
if
case
*/
一.字符函数
#1.length 获取参数的字节个数
SELECT LENGTH('john');
SELECT LENGTH('张三丰hhhhh');
#查看客户端字符集
SHOW VARIABLES LIKE '%char%';
#2.concat 拼接字符
SELECT CONCAT(last_name,'_',first_name) AS 姓名 FROM employees;
#3.大小写
SELECT UPPER('john');
SELECT LOWER('johN');
#例:姓大写,名小写拼接
SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name)) AS 姓名
FROM employees;
#4.substr
#注意:索引从1开始
#截取从指定索引后所有的字符
SELECT SUBSTR('李莫愁爱上了陆湛远',7) AS out_put;
#截取从指定索引处指定字符长度
SELECT SUBSTR('李莫愁爱上了陆湛远',1,3) AS out_put;
#案例:姓名中首字符大写,其他字符小写然后用_拼接
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) AS out_put
FROM employees;
#5.instr 返回字串第一次出现的索引,如果找不到就返回0
SELECT INSTR ('杨不悔爱上了殷刘霞','殷刘霞') AS out_put;
#获取指定部分
SELECT YEAR(NOW()) 年;
SELECT YEAR('1998-1-1') 年;
SELECT YEAR(hiredate) AS 年 FROM employees;
SELECT MONTH(NOW()) 月;
#月英文
SELECT MONTHNAME(NOW()) 月;
#str_to_date 字符通过指定个数转换称日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;
#查询入职日期为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 将日期转换为字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;
#查询有奖金的员工名和入职日期(XX月/XX日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年')
FROM employees
WHERE commission_pct IS NOT NULL;
#1.if函数:if else 的效果
SELECT IF(10<5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金 呵呵','有奖金 嘻嘻') AS 备注
FROM employees;
#2.case函数
/*
switch(变量或者表达式)
{
case 常量;语句1;break;
....
default:语句n:break;
}
mysql中
case 要判断的字段或者表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
....
else 要显示的值n或语句n;
end
*/
/*
显示部门的工资,部门编号,新工资
如部门编号=30,工资为1.1倍
如部门编号=40,工资为1.2倍
如部门编号=50,工资为1.5倍
其他部门正常
*/
SELECT salary AS 原始工资,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;
#3.case函数的使用二:类似于多层if
/*
caas
when 条件1 then 要显示的值1或语句1
when 条件1 then 要显示的值1或语句1
...
else 要显示的值n或者语句n
*/
/*
查询员工工资的情况
>20000 显示A
>15000 显示B
>10000 显示C
D
*/
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS '级别'
FROM employees;
#练习
#1.显示系统时间 日期+时间
SELECT NOW();
#2. 查询员工号,姓名,工资以及工资提高20%后的结果
SELECT employee_id,last_name,salary,salary*1.2 AS 新工资
FROM employees;
#3.员工姓名按照首字符排列,写出姓名长度
SELECT last_name,LENGTH(last_name) AS 字符长度,SUBSTR(last_name,1,1) AS 首字符
FROM employees
ORDER BY last_name;
#4.拼接
SELECT CONCAT(last_name,'earns',salary,'monthly but wants ',salary*3) AS dream_salary
FROM employees
WHERE salary=24000;
#5.
/*
job grade
AD_PRES A
ST_MAN B
IT_PROG C
*/
SELECT job_id AS job,
CASE job_id
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
END AS grade
FROM employees
WHERE job_id IN ('AD_PRES','ST_MAN' ,'IT_PROG');
#where 不能用别名