[mysql]单行函数的练习
mysql
单行函数
SELECT FORMAT(123.123, 2), FORMAT(123.523, 0), FORMAT(123.123, -2);
这里如果n等于或者小于0就自保留整数,和ROUND的四舍五入不太一样.
下面是我们得到一个ip地址的转换,因为我们ip地址会尽量保存为整数格式,类似与加密过程, 以“192.168.1.100”为例,计算方式为192乘以256的3次方,加上168乘以256的2次方,加上1乘以256,再加上 100得到这个数.
我们可以通过下面的函数INET_NTOA来还原回去
SELECT BENCHMARK(count,expr)可以对一个功能执行count次来查看我们的表达式的执行时间,也就是查看效率
SELECT CHARSET('收到撒娇的'),CHARSET(CONVERT('atguigu'USING'GBK'))
这个函数就可以实现字符集的装换,这个因为我们客户端有时候字符集不一样就要进行转化,如果我们约定好的不是utf8,那就要进行装换了.这一章还是很重的,大家必要的时候还是要做一下练习.
单行函数的练习
函数练习# 1.显示系统时间(注:日期+时间)
SELECT NOW() FROM DUAL
这里第一题大家只需要记一个就可以,但是其实还有很多可以用的,NOW(),SYSDATE(),CURRENT_TIMESTAMP(),LOCALTIME(),LOCATIMESTAMP()
# 2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
SELECT employee_id,last_name,salary,salary*1.2 AS "new salary" FROM employees
这里第二题记得我买的规范,字段别名用””包裹
# 3.将员工的姓名按首字母排序,并写出姓名的长度(length)
SELECT last_name,LENGTH(last_name) "name lenth" FROM employees ORDER BY last_name
第3题这里如果我们按照长度排序,就直接用ORDER BY长度排序,所以我们一般函数都会给他起一个别名,我们可以直接用别名排序
# 4.查询员工id,last_name,salary,并作为一个列输出,别名为OUT_PUT
SELECT CONCAT(employee_id,last_name,salary) OUT_PUT FROM employees
这题的几个字段我们就要连接起来,我们就要用到CONCAT,我们要有一个好习惯,记得大小写,到时候linux也不会有影响
# 5.查询公司各员工工作的年数、工作的天数,并按工作年数的降序排序
SELECT T1.last_name
,T1.employee_id
,IFNULL(YEAR(T2.end_date)-YEAR(T2.start_date),YEAR(NOW())-YEAR(T1.hire_date)) AS "jobyear"
,IFNULL(DATEDIFF(T2.end_date,T1.hire_date),DATEDIFF(CURRENT_DATE(),T1.hire_date))
FROM employees T1 LEFT JOIN job_history T2 ON T1.employee_id=T2.employee_id
ORDER BY jobyear DESC
员工表里是有一个字段叫hire_date,就可以用我们DATEDIFF的函数.TO_DAYS(NOW())-TO_DAYS(hire_date)也是可以计算的.
# 6.查询员工姓名,hire_date , department_id,满足以下条件:雇用时间在1997年之后,department_id 为80 或 90 或110, commission_pct不为空
SELECT T1.last_name
,T1.hire_date
,T2.department_id
FROM employees T1 JOIN departments T2
ON T1.department_id=T2.department_id
WHERE YEAR(T1.hire_date)>1997
AND T1.department_id IN (80,90,110)
AND commission_pct IS NOT NULL
#7.查询公司中入职超过10000天的员工姓名、入职时间
SELECT T1.last_name
,T1.hire_date
,IFNULL(DATEDIFF(T2.end_date,T1.hire_date),DATEDIFF(CURRENT_DATE(),T1.hire_date)) AS jobtime
FROM employees T1 LEFT JOIN job_history T2 ON T1.employee_id=T2.employee_id
WHERE IFNULL(DATEDIFF(T2.end_date,T1.hire_date),DATEDIFF(CURRENT_DATE(),T1.hire_date))>10000
ORDER BY jobtime DESC
#8.做一个查询,产生下面的结果
#<last_name> earns <salary> monthly but wants <salary*3>
SELECT CONCAT(last_name,' earns ',salary,' monthly but wants ',salary*3) AS " Dream salary " FROM employees
# 9.使用case-when,按照下面的条件
SELECT T1.last_name,T2.job_id, CASE T2.job_id
WHEN 'AD_PRES' THEN
'A'
WHEN 'ST_MAN' THEN
'B'
WHEN 'IT_PROG' THEN
'C'
WHEN 'SA_REP' THEN
'D'
WHEN 'ST_CLERK' THEN
'E'
ELSE
'no'
END
FROM employees T1 LEFT JOIN jobs T2 ON T1.job_id=T2.job_id;
更多推荐
所有评论(0)