MYSQL数据库基础(二 关于字符串函数与Date函数的使用)
程序员文章站
2022-04-17 17:33:41
...
MYSQL中的一些常用类
这里我们参考 emp表 来进行学习
concat(str1,str2,str3) 的使用 和 substr(截取字符串,选择起始位置第一个位置是1,需要截取的长度)
-- CONCAT(str1,str2,...)字符串的拼接
-- SUBSTR(str FROM pos FOR len)字符串裁剪
SELECT CONCAT(SUBSTR(HIREDATE,1,4),'年',SUBSTR(HIREDATE,6,7),'月')
FROM emp -- 通过拼接 concat来实现对字符串的增加,substr是从选取要截取的字符 起始位置,末位置
-- 【2】以首字母大写的方式显示所有员工的姓名.UPPER(str),SUBSTR(),CONCAT(str1,str2,...)
SELECT CONCAT(upper(substr(ename,1,1)),LOWER(substr(ename,2,(CHAR_LENGTH(ename)-1) ) ))as '姓名'
from emp
-- 【1】找出早于12年前受雇的员工
select * from emp where HIREDATE<='2012'
-- 【2】以首字母大写的方式显示所有员工的姓名.
select concat(upper(SUBSTRING(ename,1,1)),lower(substring(ename,2,(char_length(ename)-1)))) as 姓名
from emp
-- 【3】显示不带有'R'的员工的姓名
SELECT ename FROM emp where ENAME not LIKE '%R%'
-- 【4】显示正好为5个字符的员工的姓名
select ename FROM emp where ename like'_____'
-- 【5】显示所有员工姓名的前三个字符
select SUBSTR(ename,1,3) FROM emp
-- 【6】显示所有员工的姓名,用'a'替换所有的'A'
SELECT replace(ename,'A','a') from emp
-- 【7】显示满10年的服务年限的员工的姓名和受雇日期
select ename,HIREDATE from emp WHERE (now()-HIREDATE)>=10
-- 【8】显示员工的详细资料,按姓名排序
select * FROM emp ORDER BY ename asc
-- 【9】显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面
select ename,hiredate FROM emp ORDER BY hiredate asc
-- 【10】显示所有员工的姓名,加入公司的年份和月份,按受雇日期所月排序,
-- 若月份相同则将最早年份的员工排在最前面
select ename,concat(substr(hiredate,1,4),'年',substr(hiredate,6,2),'月')from emp
ORDER BY substr(hiredate,6,2) asc,substr(hiredate,1,4) asc
-- 【11】显示所有员工的姓名,工作,薪金,按工作的降序排列,若工作相同则按薪金排序
select ename,job,sal from emp ORDER BY job desc,sal desc
-- 【12】找出在(任何年份的)2月受聘的所有员工
select * from emp where substr(hiredate,6,2)=2
-- 【13】对于每个员工,显示其加入公司的天数
SELECT ename,DATEDIFF(now(),hiredate)as'加入天数' FROM emp
-- 【14】显示姓名字段的任何位置包含‘A’的所有员工的姓名
SELECT ename from emp WHERE ename like'%A%'
日期函数的使用
-- 日期型函数 java 中 new Date()得到当前的系统时间
select CURDATE(); -- 年-月-日
select CURTIME(); -- 时:分:秒
select now(); -- 年-月-日 时:分:秒
select SYSDATE(); -- 年-月-日 时:分:秒
select DAYOFYEAR(now()); -- 这一年中的第几天
select DAYOFWEEK(now()); -- 一周的第六天
select WEEKOFYEAR(now()); -- 这一年中的第30周
select DATE_FORMAT(now(),'%Y年%m月%d日');
select DATE_ADD(now(),INTERVAL 10 DAY); -- 10天之后是哪天
select DATE_ADD(now(),INTERVAL -10 DAY); -- 10天之前是哪天
select DATE_SUB(now(),INTERVAL 10 YEAR); -- 10年之前
select DATE_ADD(now(),INTERVAL -10 YEAR); -- 与上句代码结果相同
select DATEDIFF(now(),'2008-8-8'); -- 第29界北京奥运会已经过去10多年了
select DATEDIFF(now(),'1992-12-9');