欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MYSQL数据库基础(二 关于字符串函数与Date函数的使用)

程序员文章站 2022-04-17 17:33:41
...

MYSQL中的一些常用类

MYSQL数据库基础(二 关于字符串函数与Date函数的使用)

这里我们参考 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是从选取要截取的字符 起始位置,末位置

MYSQL数据库基础(二 关于字符串函数与Date函数的使用)

-- 【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

MYSQL数据库基础(二 关于字符串函数与Date函数的使用)

--  【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%'

 

 

 

MYSQL数据库基础(二 关于字符串函数与Date函数的使用)

 

MYSQL数据库基础(二 关于字符串函数与Date函数的使用)

日期函数的使用

-- 日期型函数   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');