字元串函數:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcukDOmV2YjBjZ2M2YlBTMkVmNwIWNxQDZxQGZ2YDZiNTMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
注意SUBSTR 如果向要從後向前截取,可以使用負數來表示
例如:SUBSTR('helloword',-3),表示截取最後三個字元,不寫長度.預設從開始截取到字元串的末尾.
以上函數除了INITCAP以外都可以在mysql中使用
程式中的字元串,下标從0開始,資料庫中的下标從1開始,Oracle中,如果下标寫0.則按照1處理,在mysql中,不會傳回任何結果
數學函數
注意,ROUND,和TRUNC函數都可以是用以下格式ROUND(889.99,-2) 這樣中格式,小數位數可以是負數,當小數位數是負數時,例子中的結果是900
在mysql中沒有TRUNC函數,有功能相同的TRUNCATE函數,用法也和Oracle中的TRUNC函數相同.
時間函數
在日期中有如下三個操作:
日期+數字=日期(表示若幹天之後的天數)
日期-數字=日期(表示若幹天前的天數)
日期-日期=天數(表示兩個日期相差多少天)
但是這種計算的結果不精确,在oracle中不精确,在mysql中結果會是一種錯誤的結果
是以給出以下日期函數
使用日期函數進行日期的計算會很精确,但是以上的函數在mysql中隻有LAST_DAY可以使用
轉換函數
以上函數在mysql中不存在,隻有Oracle中有
例如我想要将現在的時間轉換成字元串
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual;
我們也可以從日期中擷取年.月,日
SELECT TO_CHAR(SYSDATE,'yyyy') from dual;
還可以用來格式化數字
SELECT TO_CHAR(5635192189372198731,'999,999,999,999,999,999,999,999,999') FROM dual;
數字9.是任意數字的标記,在格式化數字或者貨币的時候,定義的格式的字元串中,标記的位數必須大于需要轉換的資料的位數
貨币的轉換
本地貨币的标記是L,任意數字的标記是9
通用函數
NAL函數
如果我們要查詢員工表中,員工的編号,員工的姓名,員工的年薪( 年薪=(月薪+績效)*12 )
但是有些員工沒有績效,這樣的話,最後傳回的結果,沒有績效的員工就沒有年薪
指令:select empno,ename,(sal+comm)*12 INCOME from emp;
這時候我們就可以使用NVL函數
指令select empno,ename,(sal+NVL(comm,0))*12 INCOME from emp;
DECODE函數,這個函數比較重要,面試的時候可能會被問到
完整的員工資訊如下:
如果我們想要查詢員工編号,員工姓名,員工的job,但是員工的job名稱卻是英文,我們看着不太好看,想要将其顯示為中文
指令: Select empno,ename,job,DECODE(job,'CLERK','辦事人員','SALESMAN','銷售人員','MANAGER','經理','--') 職位 From emp ;