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

本文详细介绍MYSQL中常用的字符串操作函数如CONCAT, SUBSTR, UPPER等,以及日期函数如CURDATE, DATEDIFF等的使用方法,通过具体示例展示如何进行字符串拼接、裁剪、格式转换及日期计算。

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');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值