您的位置:首页 > 数据库 > MySQL

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函数主要使用在查询出操作中,客户需要日期以特定格式展示的时候需要使用该函数

DEPTNODNAMELOC
10ACCOUNTINGNEW YORK
20RESEARCHINGDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
7369SMITHCLERK79021980/12/17800NULL20
7499ALLENSALESMAN76981981/2/20160030030
7521WARDSALESMAN76981981/2/22125050030
7566JONESMANAGER78391981/4/22975NULL20
7654MARTINSALESMAN76981981/9/281250140030
7698BLAKEMANAGER78391981/5/12850NULL30
7782CLARKMANAGER78391981/6/92450NULL10
7788SCOTTANALYST75661987/4/193000NULL20
7839KINGPERSIDENTNULL1981/11/175000NULL10
7844TURNERSALESMAN76981981/9/81500NULL30
7876ADAMSCLERK77881987/5/231100NULL20
7900JAMESCLERK76981981/12/3950NULL30
7902FORDANALYST75661981/12/33000NULL20
7934MILLERCLERK77821982/1/231300NULL10
GRADELOSALHISAL
17001200
212011400
314012000
420013000
530019999
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息