[Js-MySQL]函數


數據處理函數/單行處理函數

  • Lower 轉換小寫
  • upper 轉換大寫
  • substr 取子串(substr( 被截取的字符串, 起始下標, 截取的長度))
  • length 取長度
  • trim 去空格
  • 35 / 103
  • str_to_date 將字符串轉換成日期
  • date_format 格式化日期
  • format 設置千分位
  • round 四舍五入
  • rand() 生成隨機數
  • Ifnull 可以將 null 轉換成一個具體值
1 select lower(ename) from emp;  --查詢員工,將員工姓名全部轉換成小寫
2 
3 select * from emp where job=upper('manager');  --查詢 job 為 manager 的員工
4 
5 select * from emp where substr(ename, 1, 1)=upper('m');  --查詢姓名以 M 開頭所有的員工
6 
7 select ename from emp where length(ename)=5    --取得員工姓名長度為 5 的
8 
9 select * from emp where job=trim(upper('manager '));    --取得工作崗位為 manager 的所有員工

 

 

1 /*
2     在SQL語句中查詢時間的兩種方式
3 */
4 select * from emp where HIREDATE='1981-02-20';    --查詢 1981-02-20 入職的員工(第一種方法,與數據庫的格式匹配上)
5 select * from emp where HIREDATE=str_to_date('1981-02-20','%Y-%m-%d');    --查詢 1981-02-20 入職的員工(第二種方法,將字符串轉換成 date 類型)
6 select * from emp where HIREDATE=str_to_date('02-20-1981','%m-%d-%Y');    --str_to_date 可以將字符串轉換成日期,具體格式 str_to_date (字符串,匹配格式)

 

1 select empno, ename, date_format(hiredate, '%Y-%m-%d %H:%i:%s') as hiredate from emp;    --查詢 1981-02-20 以后入職的員工,將入職日期格式化成 yyyy-mm-dd hh:mm:ss
2 select date_format(now(),'%Y-%m-%d %H %i %s');    --獲取並格式化當前時間 now() 獲得當前時間
  日期格式的說明   %Y:代表 4 位的年份   %y:代表 2 位的年份   %m:代表月, 格式為(01……12)   %c:代表月, 格式為(1……12)   %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)

 

 1 select empno, ename, Format(sal, 0) from emp;    --查詢員工薪水加入千分位
 2 select empno, ename, Format(sal, 2) from emp;    --查詢員工薪水加入千分位和保留兩位小數
 3 
 4 select round(123.56);    --四舍五入  124
 5 select round(123.56,1);    --123.6
 6 select round(123.56,-1);    --120
 7 
 8 select rand();    --生成隨機數 0.2605880426807218
 9 select * from emp order by rand() limit 2;    --隨機抽取記錄數 order by必須寫上
10 
11 select 
12     empno, ename, job, sal, 
13     case job 
14     when 'MANAGER' then sal*1.1 
15     when 'SALESMAN' then sal*1.5 
16     end as newsal 
17 from emp;    --如果 job 為 MANAGERG 薪水上漲 10%,如果 job 為 SALESMAN 工資上漲 50%
18 
19 select 
20     e.*,sal ,
21     case job 
22     when 'salesman' then sal*1.1
23     when 'clerk' then sal*1.2
24     else sal
25     end as new_sal
26 from emp e;    --其他的工資不動,需要添加 else
27 
28 select ifnull(comm,0) from emp;
29 /*
30 如果 comm 為 null 就替換為 0
31 在 SQL 語句當中若有 NULL 值參與數學運算,計算結果一定是 NULL
32 為了防止計算結果出現 NULL,建議先使用 ifnull 空值處理函數預先處理。
33 */
34 --以下 SQL 是計算年薪的:
35 select empno,ename,sal,(sal+ifnull(comm,0))*12 as yearsal from emp;
36 
37 數據處理函數又被稱為單行處理函數,特點:輸入一行輸出一行

 

分組函數/ 聚合函數/多行處理函數

  • count 取得記錄數
  • sum 求和
  • 42 / 103
  • avg 取平均
  • max 取最大的數
  • min 取最小的數

注意:分組函數自動忽略空值,不需要手動的加 where 條件排除空值。

select count(*) from emp where xxx; 符合條件的所有記錄總數。

select count(comm) from emp; comm 這個字段中不為空的元素總數。

 

注意:分組函數不能直接使用在 where 關鍵字后面。

mysql> select ename,sal from emp where sal > avg(sal);

ERROR 1111 (HY000): Invalid use of group function

select count(*) from emp;    --取得所有的員工數,Count(*)表示取得所有記錄,忽略 null,為 null 的值也會取得
select count(distinct job) from emp;  --取得工作崗位的個數
select count(comm) from emp; --取得津貼不為 null 員工數,采用 count(字段名稱),不會取得為 null 的記錄

--Sum 可以取得某一個列的和,null 會被忽略
select sum(sal) from emp;  --取得薪水的合計
select sum(comm) from emp;  --取得津貼的合計,null 會被忽略
select sum(sal+comm) from emp;  /*取得薪水的合計(sal+comm),結果不正確,原因在於 comm 字段有 null 值,所以無法計算,sum 會忽略掉,正確的做法是將 comm 字
段轉換成 0,正確的寫法如下*/
select sum(sal+IFNULL(comm, 0)) from emp;

select avg(sal) from emp;  --取得平均薪水

select max(sal) from emp;  --取得最高薪水
select max(str_to_date (hiredate, '%Y-%m-%d')) from emp;  --取得最晚入職得員工

select min(sal) from emp;  --取得最低薪水
select min(str_to_date(hiredate, '%Y-%m-%d')) from emp;  --取得最早入職得員工

--組合聚合函數
select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;

 

 

 

 

Lower 轉換小寫upper 轉換大寫substr 取子串(substr( 被截取的字符串, 起始下標,截取的長度))length 取長度trim 去空格35 / 103str_to_date 將字符串轉換成日期date_format 格式化日期format 設置千分位round 四舍五入rand() 生成隨機數Ifnull 可以將 null 轉換成一個具體值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM