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

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