| Lower | 轉換小寫|
| --- | --- |
|upper| 轉換大寫|
| substr| 取子串(**substr(被截取的字符串,起始下標,截取的長度)**|
| length|取長度|
|trim| 去空格|
|str_to_date| 將字符串轉換成日期|
|date_format|格式化日期|
|format| 設置千分位|
|round|四舍五入|
|rand()|生成隨機數|
|Ifnull|可以將null轉換成一個具體值 ifnull(字段名,替代的數據)例如 ifnull(comm,0)|
|to_days(日期值)|獲取這個日期至到0000-01-01 一共有多少天now() 獲取當前的系統時間 |
注:數據處理函數是該數據本身特有的,有些函數可能在其它數據庫不起作用;
## 1-2 lower函數:轉換為小寫
用法:lower(要轉換字段名稱)
查詢員工姓名,將員工姓名全部轉換成小寫
select lower(ename) as ename from emp;
## 1-3 upper函數:轉換為大寫
用法:upper(要轉換字段名稱)
查詢員工姓名,將員工姓名全部轉換為大寫
select upper(ename) as ename from emp;
## 1-4 substr函數:取子串
用法:substr(被截取字段名稱,起啟下標,截取長度)
查詢員工姓名中第二個字母為A的所有員工
select ename from emp where substr(enam,2,1) = ‘A’;
>[danger] 聯想知識點,模糊查詢:
**select ename from emp where ename like ‘\_A%’;**
## 1-5 length函數:取字段長度
用法:length(字段名稱)
取得員工姓名長度
select ename,length(ename) as nameLength from emp;
## 1-6 trim函數:去除首尾空格
作用:trim函數去除首尾空格,不會去除中間空格
用法:trim(字符串)
取得工作崗位為manager的所有員工
```
select * from emp where job = trim('manager ');
```
## 1-7 round函數:四舍五入
用法:round(要四舍五入的數字,四舍五入到哪一位),默認保留整數位
保留整數位或不保留小數位:select round(125.18);或者 select round(125.18,0);
## 1-8 rand函數:生成隨機數
用法:rand()
生成一個0-1的隨機數;
select rand();
生成一個0-100的隨機數
select round(rand()*100);
## 1-9 ifnull函數:空值處理函數
用法:ifnull(字段名稱,將要替換)
**結論:在數據庫中,有****Null****參與數學運算的結果一定為****Null****;為了防止計算結果出現****Null****,建議先使用****ifnull****函數預先處理。**
查詢員工姓名及補助,如果補助為Null設置為0;
select ename,ifnull(comm,0) from emp;
>[danger] 注意:查詢員工薪水與補助的和
錯誤寫法:select sal+comm from emp;
正確寫法:select sal + ifnull(comm,0) from emp;
沒有補助的員工,將每月補助100,求員工的年薪
select ename, (sal + ifnull(comm,100)) \* 12 yearsal from emp;
## 1-10 case…when…then…else…end
用法:匹配工作崗位,當為MANAGER時,薪水上調10%,當為SALESMAN時,薪水上調50%,其它崗位薪水不變
```
case job
when ‘MANAGER’ then sal * 1.1
when ‘SALESMAN’then sal * 1.5
else sal
end
```
注意:使用中DQL語句中;
案例:
匹配工作崗位,當為MANAGER時,薪水上調10%,當為SALESMAN時,薪水上調50%,其它崗位薪水不變
## 1-11 str_to_date函數:將字符串轉換為日期
作用:將‘日期字符串’轉換為‘日期類型’數據
執行結果:DATE類型
用法:str_to_date(‘日期字符串’,‘日期格式’)
MySQL日期格式:
%Y:代表4位的年份
%y:代表2位的年份
%m:代表月,格式(01 … … 12)
%c:代表月,格式(1 … … 12)
%d:代表日
%H:代表小時,格式(00 … … 23)
%h:代表小時,格式(01 … … 12)
%i:代表分種,格式(00 … … 59)
%r:代表 時間,格式為12 小時(hh:mm:ss \[AP\]M)
%T:代表 時間,格式為24 小時(hh:mm:ss)?
%S:代表 秒,格式為(00……59) ?
%s:代表 秒,格式為(00……59)
聯想知識點:java中的日期格式
yyyy 年
MM 月
dd 日
HH 時
mm 分
ss 秒
SSS 毫秒
案例:
查詢出1981-12-03入職的員工
select ename,hiredate from emp where hiredate = ‘1981-12-03’

執行成功原因:
輸入的日期字符串格式與MySQL默認日期格式相同,MySQL默認日期格式:%y-%m-%d
查詢出02-20-1981入職的員工
select ename,hiredate from emp where hiredate = ’02-20-1981’;

錯誤原因:‘02-20-1981’是一個字符串varchar類型,與DATE類型不匹配
糾正以上SQL語句的錯誤:
select ename,hiredate from emp where hiredate = str\_to\_date(’02-20-1981’,‘%m-%d-%Y’);

總結:
日期是數據庫本身的特色,也是數據庫本身機制中的一個重要內容,所以仍需掌握;
每一個數據庫處理日期時采用的機制都不一樣,都有自己的一套處理機制,所以在實際開發中將日期字段定義為DATE類型的情況很少;
如果使用日期類型,java程序將不能通用。實際開發中,一般會使用“日期字符串”來表示日期;
## 1-12 data\_format函數:將日期轉換為特定格式字符串
作用:將‘日期類型’轉換為特定格式的‘日期字符串’類型
執行結果:字符串varchar類型(具有特定格式)
用法: date_format(日期類型數據,‘日期格式’)
MySQL日期格式:
%Y:代表4位的年份
%y:代表2位的年份
%m:代表月,格式(01 … … 12)
%c:代表月,格式(1 … … 12)
%d:代表日
%H:代表小時,格式(00 … … 23)
%h:代表小時,格式(01 … … 12)
%i:代表分種,格式(00 … … 59)
%r:代表 時間,格式為12 小時(hh:mm:ss \[AP\]M) ?
%T:代表 時間,格式為24 小時(hh:mm:ss)?
%S:代表 秒,格式為(00……59) ?
%s:代表 秒,格式為(00……59)
案例:
查詢員工的入職日期,以‘10-12-1980’的格式顯示到窗口中;

查詢員工的入職日期,以‘10/12/1980’的格式顯示到窗口中;

MySQL日期默認格式示例
以下兩個DQL語句執行結果相同
第一種:hiredate自動轉換成varchar類型,默認采用%Y-%m-%d格式

第二種:

結論:data_format函數主要用在數據庫查詢操作中。實際工作中,客戶需要日期以特定格式展示的時候,需要使用該函數
- 空白目錄
- 1、數據庫概述及數據準備
- 1.1、SQL概述
- 1.2、什么是數據庫
- 1.3、MySql概述
- 1.4、MySql的安裝
- 1.5、表
- 1.6、SQL的分類
- 1.7、導入演示數據
- 1.8、表結構描述
- 2、常用命令
- 2.1、查看msyql版本
- 2.2、創建數據庫
- 2.3、查詢當前使用的數據庫
- 2.4、終止一條語句
- 2.5、退出mysql
- 3、查看“演示數據”的表結構
- 3.1、查看和指定現有的數據庫
- 3.2、指定當前缺省數據庫
- 3.3、查看當前使用的庫
- 3.4、查看當前庫中的表
- 3.5、查看其他庫中的表
- 3.6、查看表的結構
- 3.7、查看表的創建語句
- 4、簡單的查詢
- 4.1、查詢一個字段
- 4.2、查詢多個字段
- 4.3、查詢全部字段
- 4.4、計算員工的年薪
- 4.5、將查詢出來的字段顯示為中文
- 5、條件查詢
- 5.1 概述
- 5.2 等號操作符
- 5.3不等號操作符
- 5.4 between … and …操作符
- 5.5 is null
- 5.6 and
- 5.7 or
- 5.8 表達式的優先級
- 5.9 in
- 5.10 not
- 5.11 like
- 6、排序數據
- 6.1、單一字段排序
- 6.2、手動指定排序順序
- 6.3、多個字段排序
- 6.4、使用字段的位置來排序
- 7、分組函數/聚合函數/多行處理函數
- 7.1、count
- 7.2、sum
- 7.3、avg
- 7.4、max
- 7.5、min
- 7.6、組合聚合函數
- 7.7 函數總結(了解內容)
- 7.1數據處理函數(單行處理函數)
- 8、分組查詢
- 8.1、group by
- 8.2、having
- 8.3、select語句總結
- 9、連接查詢
- 9.1、SQL92語法
- 9.2、SQL99語法
- 10、子查詢
- 10.1、在where語句中使用子查詢,也就是在where語句中加入select語句
- 10.2、在from語句中使用子查詢,可以將該子查詢看做一張表
- 10.3、在select語句中使用子查詢
- 11、union
- 11.1、union可以合并集合(相加)
- 12、limit 的使用
- 12.1、取得前5條數據
- 12.2、從第二條開始取兩條數據
- 12.3、取得薪水最高的前5名
- 13、表
- 13.1、創建表
- 13.2、增加/刪除/修改表結構
- 13.2.1、添加字段
- 13.2.2、修改字段
- 13.2.3、刪除字段
- 13.3、添加、修改和刪除
- 13.3.1、insert
- 13.3.2、update
- 13.3.3、delete
- 總結
- 13.4、創建表加入約束
- 13.4.1、非空約束,not null
- 13.4.2、唯一約束,unique
- 13.4.3、主鍵約束,primary key
- 13.4.4、外鍵約束,foreign key
- 13.4.5、級聯更新與級聯刪除
- 13.4.5.1、on update cascade;
- 13.4.5.2、on delete cascade;
- 13.5、t_student和t_classes完整示例
- 14、存儲引擎(了解)
- 14.1、存儲引擎的使用
- 14.2、常用的存儲引擎
- 14.2.1、MyISAM存儲引擎
- 14.2.2、InnoDB存儲引擎
- 14.2.3、MEMORY存儲引擎
- 14.3、選擇合適的存儲引擎
- 15、事務
- 15.1、概述
- 15.2、事務的提交與回滾演示
- 15.3、自動提交模式
- 15.4、事務的隔離級別
- 15.4.1、隔離級別
- 15.4.2、四個隔離級別
- 15.4.3、隔離級別與一致性問題的關系
- 15.4.4、設置服務器缺省隔離級別
- 15.4.5、隔離級別的作用范圍
- 15.4.6、查看隔離級別
- 15.4.7、并發事務與隔離級別示例
- 16、索引
- 16.1、索引原理
- 16.2、索引的應用
- 16.2.1、創建索引
- 16.2.2、查看索引
- 16.2.3、使用索引
- 16.2.4、刪除索引
- 17、視圖
- 17.1、什么是視圖
- 17.2、創建視圖
- 17.3、修改視圖
- 17.4、刪除視圖
- 18、DBA命令(了解)
- 18.1、新建用戶
- 18.2、授權
- 18.3、回收權限
- 18.4、導出導入
- 18.4.1、導出
- 18.4.1.1、導出整個數據庫
- 18.4.1.2、導出指定庫下的指定表
- 18.4.2、導入
- 19、數據庫設計的三范式
- 19.1、第一范式
- 19.2、第二范式
- 19.3、第三范式
- 19.4、三范式總結
- 作業
- 1、取得每個部門最高薪水的人員名稱
- 2、哪些人的薪水在部門的平均薪水之上
- 3、取得部門中(所有人的)平均的薪水等級
- 4、不準用組函數(Max),取得最高薪水
- 5、取得平均薪水最高的部門的部門編號
- 6、取得平均薪水最高的部門的部門名稱
- 7、求平均薪水的等級最低的部門的部門名稱
- 8、取得比普通員工(員工代碼沒有在mgr字段上出現的)的最高薪水還要高的領導人姓名
- 9、取得薪水最高的前五名員工
- 10、取得薪水最高的第六到第十名員工
- 11、取得最后入職的5名員工
- 12、取得每個薪水等級有多少員工
- 13、面試題
- 14、列出所有員工及領導的姓名
- 15、列出受雇日期早于其直接上級的所有員工的編號,姓名,部門名稱
- 16、列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門.
- 17、列出至少有5個員工的所有部門
- 18、列出薪金比"SMITH"多的所有員工信息.
- 19、列出所有"CLERK"(辦事員)的姓名及其部門名稱,部門的人數.
- 20、列出最低薪金大于1500的各種工作及從事此工作的全部雇員人數.
- 21、列出在部門"SALES"<銷售部>工作的員工的姓名,假定不知道銷售部的部門編號.
- 22、列出薪金高于公司平均薪金的所有員工,所在部門,上級領導,雇員的工資等級.
- 23、列出與"SCOTT"從事相同工作的所有員工及部門名稱.
- 24、列出薪金等于部門30中員工的薪金的其他員工的姓名和薪金.
- 25、列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金.部門名稱.
- 26、列出在每個部門工作的員工數量,平均工資和平均服務期限.
- 27、列出所有員工的姓名、部門名稱和工資。
- 28、列出所有部門的詳細信息和人數
- 29、列出各種工作的最低工資及從事此工作的雇員姓名
- 30、列出各個部門的MANAGER(領導)的最低薪金
- 31、列出所有員工的年工資,按年薪從低到高排序
- 32、求出員工領導的薪水超過3000的員工名稱與領導名稱
- 33、求出部門名稱中,帶'S'字符的部門員工的工資合計、部門人數.
- 34、給任職日期超過30年的員工加薪10%.
- 教務管理系統(項目)