MySQL入门(2)- 排序&数据处理函数&日期处理函数

排序&数据处理函数&日期处理函数

此系列记录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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章