MySQL入门(2)- 排序&数据处理函数&日期处理函数
2018-02-20 21:32
711 查看
排序&数据处理函数&日期处理函数
此系列记录PN视频学习笔记* 本博客涉及到的数据为bjpowernode.sql,数据见文末,SQL文见MySQL入门(9)文末。* 该数据有三张表,分别是部门表dept(deptno部门编号、dname部门名称、loc位置)、 员工表emp(empno工号、ename员工姓名、job职位、mgr直属领导工号、 hiredate入职日期、sal月薪、comm补贴、deptno部门编号)、 薪水等级表salgrade(grade等级、losal区间下限、hisal区间上限)
一、排序&数据处理函数
1、排序数据(order by)1)单字段排序
select ename,sal fromemp order by sal asc ;(默认升序)
select ename,sal fromemp order by sal desc;
select ename,sal fromemp order by 2;(2表示表里面第二个字段,尽量不要写)
2)多字段排序
select ename,sal fromemp order by sal desc,ename asc;
2、数据处理函数/单行处理函数
转小写(lower),转大写(upper),截取字符串(substr),获取字符串长度(length),去除前后空白(trim),四舍五入(round),生成随机数(rand),空值处理函数(ifnull)
select ename from emp;
select lower(ename)as ename from emp;
select upper(ename) as ename from emp;
select substr(ename,1,3) from emp;(substr(字段名,起始位置/开始下标,长度))
第二个字母是a的
select ename from emp where substr(ename,2,1)=‘A’;
select length(ename)from emp;
select ename from emo where ename = ‘ SMITH ’;(没有结果)
select ename from emo where ename = trim(‘ SMITH ’);
select round(123.456);(默认到整数位)
select round(123.456,1);(保留一位小数)
select round(123.456,-1);(保留到个位)
select rand();
select round(rand()*100);
select ename,commfrom emp;
补助是空的显示为零
select ename,ifnull(comm,0) as comm fromemp;
select sal + comm from emp(数据库内有空值参加的数学运算都为空)
补助为空为100
select sal + ifnull(comm,100) from emp
select ename,(sale+comm)*12 from emp;
select ename,(sale+ifnull(comm,0))*12 as yearsal from emp;
二、日期处理函数
0、先了解一下数据可中的类型int 整数型
varhar 可变长度字符串
date 日期类型
double 浮点型
……
1、关于MYSQL的日期处理
1.1 每一个数据库处理日期的时候采用的机制都是不同的,日期处理都有自己的而一套机制。所以在实际的开发中,表中的字段定义为DATE类型的情况很少。因为一旦使用日期类型,那么java程序将不能够通用。在实际开发中,一般会使用“日期字符串”来表示日期。
1.2 日期是数据库本身的特色,也是数据库本身机制中的一个重要内容,所以还是需要掌握。
2、MYSQL数据库管理系统中对日期的处理提供了两个重要的函数:
-str_to_date
-date_format
3、str_to_date
3.1该函数的作用:将“日期字符串”转换成“日期类型”数据。【varchar --> date】
3.2该函数的执行结果DATE类型
3.3该函数的使用格式:
str_to_date(‘日期字符串’,‘日期格式’)、
3.4关于MYSQL中的日期格式:
MYSQL的日期格式:
%Y 年
%m 月
%d 日
%H 时
%i 分
%s 秒
3.5案例: 查询1980-12-17入职的员工
法一:与数据库的格式匹配
select * from emp where hiredate=‘1980-12-17’;
MYSQL默认日期规格: %Y-%m-%d,以上的日期字符串‘1980-12-17’正好和默认的日期格式一样,存在了自动类型转换,自动将日期字符串转换成了日期类型,所以以上查询可以查询出结果。
select ename,hiredate from emp where hiredate=‘12-17-1980’;
Empty set, 2 warnings(0.00 sec)
‘12-17-1980’日期字符串和mysql默认的日期格式不同
hiredate是date类型,‘12-17-1980’是一个字符串类型,类型不匹配。
所以无法查询结果,并且有警告【错误】发生。
纠正以上SQL语句错误:
select ename,hiredate from emp where hiredate= str_to_date(‘12-17-180’,‘%m-%d-%Y’);
select ename,hiredate from emp where hiredate=‘1980-12-17’;默认自己加了str_to_date
3.6案例
创建学生表:【create语句,以后详细讲】
createtable t_student(
id int(10)
name varchar(32)
birth date
);
插入数据:【insert语句,以后详细讲】
insert intot_student(id,name,birth)values(1,‘jack’,‘1980-10-11’);
以上可以执行,因为‘1980-10-11’虽然是varchar类型,但是由于格式和MYSQL数据可默认的日期格式相同,所以存在自动转换。
insert intot_student(id,name,birth)values(1,‘jack’,‘10-11-1980’);
ERROR 1292(22009):Incorrect data value:‘10-11-1970’for column 、birth at row 1
以上发生错误:
第一:‘10-11-1980’日期字符串的格式和MYSQL的默认字符串不同
第二:‘10-11-1970’是varchar类型,birth字段需要date类型,类型不匹配
纠正以上错误:
insert intot_student(id,name,birth)values(2,‘zhangsan’,str_to_date(‘10-11-1970’,‘%m-%d-%Y’));
3.7 str_to_date函数通常使用在插入操作中,字段是date类型,不接受字符串varchar类型,需要先通过该函数将varchar变成date 再插入数据,才能成功。
4、date_format
4.1函数的作用:将日期类型date转换成具有特定格式日期字符串varchar【date --> varchar】
4.2函数的运算结果:varchar类型【具备特定格式】
4.3函数的语法格式:
date_(‘日期类型数据’,‘日期格式’)format
4.4案例: 查询员工的入职日期,以‘10-12-1980’(‘%m-%d-%Y’)的格式显示在窗口中。
selectename.date_format(hiredate,‘%m-%d-%Y’) as hiredate from emp;
selectename,hiredate from emp;
select ename,date_format(hiredate,‘%Y-%m-%d’) as hiredate from emp;
【hiredate自动那个转换成varchar类型,采用‘%Y-%m-%d’,上述两语句等价】
4.5案例: 查询员工的入职日期,以‘10/12/1980’(‘%m/%d/%Y’)的格式显示在窗口中。
selectename,date_format(hiredate,‘%m/%d/%Y’) as hiredate from emp;
4.6结论:date_format函数主要使用在查询出操作中,客户需要日期以特定格式展示的时候需要使用该函数
DEPTNO | DNAME | LOC |
10 | ACCOUNTING | NEW YORK |
20 | RESEARCHING | DALLAS |
30 | SALES | CHICAGO |
40 | OPERATIONS | BOSTON |
EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
7369 | SMITH | CLERK | 7902 | 1980/12/17 | 800 | NULL | 20 |
7499 | ALLEN | SALESMAN | 7698 | 1981/2/20 | 1600 | 300 | 30 |
7521 | WARD | SALESMAN | 7698 | 1981/2/22 | 1250 | 500 | 30 |
7566 | JONES | MANAGER | 7839 | 1981/4/2 | 2975 | NULL | 20 |
7654 | MARTIN | SALESMAN | 7698 | 1981/9/28 | 1250 | 1400 | 30 |
7698 | BLAKE | MANAGER | 7839 | 1981/5/1 | 2850 | NULL | 30 |
7782 | CLARK | MANAGER | 7839 | 1981/6/9 | 2450 | NULL | 10 |
7788 | SCOTT | ANALYST | 7566 | 1987/4/19 | 3000 | NULL | 20 |
7839 | KING | PERSIDENT | NULL | 1981/11/17 | 5000 | NULL | 10 |
7844 | TURNER | SALESMAN | 7698 | 1981/9/8 | 1500 | NULL | 30 |
7876 | ADAMS | CLERK | 7788 | 1987/5/23 | 1100 | NULL | 20 |
7900 | JAMES | CLERK | 7698 | 1981/12/3 | 950 | NULL | 30 |
7902 | FORD | ANALYST | 7566 | 1981/12/3 | 3000 | NULL | 20 |
7934 | MILLER | CLERK | 7782 | 1982/1/23 | 1300 | NULL | 10 |
GRADE | LOSAL | HISAL |
1 | 700 | 1200 |
2 | 1201 | 1400 |
3 | 1401 | 2000 |
4 | 2001 | 3000 |
5 | 3001 | 9999 |
相关文章推荐
- ABAP - 日期格式转换 & ABAP常用日期处理函数
- ABAP - 日期格式转换 & ABAP常用日期处理函数
- 日期格式转换 & ABAP常用日期处理函数
- MySQL日期处理函数_20160922
- MySQL之日期时间处理函数
- MySQL学习足迹记录09--常用文本,日期,数值处理函数
- MySQL日期数据类型、相互转换、处理函数总结
- MySql日期处理函数
- ABAP - 日期格式转换 & ABAP经常使用日期处理函数
- mysql日期处理函数
- MySQL日期和时间处理函数应用总结
- mysql日期处理函数
- MySQL日期处理相关函数
- mysql 日期时间处理函数
- MySQL日期处理函数
- mysql 日期时间处理函数
- MySQL之日期时间处理函数
- mysql navicat 新建函数出问题处理
- mYsql日期和时间函数不求人
- (原创)DB2“万能”日期格式处理函数,嘿嘿