Oracle 單行函式
字元函式
加紅是較為常用的
[***]代表可加可不加
歡迎指正
- upper(n)(返回字串的大寫形式)
SELECT * FROM emp WHERE ename=UPPER('smith') ; |
- Lower(n)(返回字串的小寫形式)
SELECT lower('ABCDE') FROM dual ; |
- Initcap (n)(首字母大寫)
Select initcap(ename) from emp; select initcap('abcde') from dual; |
- Concat(m,n)(連線m和n)
Select concat('a','b ') from dual; select concat('12345','Abcde') as 拼接 from dual Select 'a' || 'b ' from dual; |
- Substr(chr ,m[,n])
描述:取chr的字串,m代表開始位置,n是要取的長度,當m為0時從首字元開始,當m為負時從字元尾部開始擷取。
Select substr('abcde',length('abcde')-2) from dual; Select substr('abcde',-3,3) from dual; |
- Length(n)(返回字元或者字串的長度,長度包括空格)
Select length(ename) from emp; select substr('aabcde',length('aabcde')-2,2) from dual |
- Replace(chr,search_string,[,replacement_string])
描述:將chr中滿足search_string條件的替換為replacement_string指定的字串,當search_string為null時,返回chr;當replacement_string為null時,返回chr中擷取掉search_string部分的字串。
Select replace(ename,'a','A') from emp; |
- Instr (chr1,chr2,[n,[m]])
描述:獲取字串chr2在字串chr1中出現的位置。n和m可選,省略是預設為1;n代表開始查詢的起始位置,當n為負數從尾部開始搜尋;m代表字串出現的次數
Select instr('Hello World','or') from dual; 8 indexof |
- Lpad (chr1,n,[chr2])
描述:在chr1左邊填充字元chr2,使得字元總長度為n。chr2可選,預設為空格;當chr1字串長度大於n時,則從左邊擷取chr1的n個字元顯示。
lpad('Smith',10,'*') 左側填充 lpad() *****Smith select lpad('123457',9,'**') from dual |
- Rpad(chr1,n,chr2)
描述:在chr1右邊填充chr2,使返回字串長度為n..當chr1長度大於n時,返回左端n個字元。參考LPAD()函式。
rpad('Smith',10,'*') 右側填充 rpad()Smith***** |
- Trim
trim(' Mr Smith ') 過濾首尾空格 trim() Mr Smith
select trim(' hfjdkahff ') from dual
數值函式
-
- MOD(n1,n2) 返回n1除n2的餘數,如果n2=0則返回n1的值。
select mod(24,5) from dual; |
-
- ROUND(n1[,n2]) 返回四捨五入小數點右邊n2位後n1的值,n2預設值為0,如果n2為負數就舍入到小數點左邊相應的位上(雖然oracle documents上提到n2的值必須為整數,事實上執行時此處的判斷並不嚴謹,即使n2為非整數,它也會自動將n2取整後做處理,但是我文件中其它提到必須為整的地方需要特別注意,如果不為整執行時會報錯的)。
select round(412,-2) from dual; select round(123.456,2) from dual |
-
- TRUNC(n1[,n2] 返回截尾到n2位小數的n1的值,n2預設設定為0,當n2為預設設定時會將n1截尾為整數,如果n2為負值,就截尾在小數點左邊相應的位上。退一法
select trunc (412.13,-2) from dual; select trunc(123.126,-2) from dual |
總結:round執行四捨五入 trunc不執行 直接舍掉
日期函式
-
- Months_between(m,n)
日期m和n相差的月數
select months_between(sysdate,hiredate) from emp; |
-
- Add_months(m,n)
當前日期m後推n個月 ,用於從一個日期值增加或減少一些月份
select add_months(sysdate,1) from dual; |
-
- Next_day(d, day_of_week)
返回由"day_of_week"命名的,在變數"d"指定的日期之後的第一個工作日的日期。引數"day_of_week"必須為該星期中的某一天。
select next_day(sysdate,'星期一') from dual; |
-
- Last_day
本月最後一天
select last_day(sysdate) from dual; |
轉換函式
-
- To_char
select to_char(sysdate,'yyyy') from dual; select to_char(sysdate,'fmyyyy-mm-dd') fr om dual; select to_char(sal,'L999,999,999') from emp; select to_char(sysdate,’D’) from dual;//返回星期 將不同型別轉化為字元型 |
-
- To_number
select to_number('13')+to_number('14') from dual; 相比於上面的語法下面的這種也是可行的 select '14'+'12' from dual 但是兩種方法相比第二種直接相加如果是字串和數字相混合的列會發生錯誤 特別坑人 |
-
- To_date
Select to_date(„20090210‟,‟yyyyMMdd‟) from dual; to_date和to_char在轉化日期時效果相仿但是一個是日期型別一個是字元型別 |
通用函式
-
- NVL(expr1,expr2)
如果第一個引數為空那麼顯示第二個引數的值,如果第一個引數的值不為空,則顯示第一個引數本來的值。
select nvl(comm,0) from emp; |
-
- NULLIF(expr1,expr2)
如果表示式exp1 與exp2 的值相等則返回null ,否則 返回exp1 的值
-
- NVL2(expr1,expr2, expr3)
如果該函式的第一個引數為空那麼顯示第三個引數的值,如果第一個引數的值不為空,則顯示第二個引數的值。
select empno, ename, sal, comm, nvl2(comm, sal+comm, sal) total from emp; |
-
- NVL2(expr1,expr2, expr3)
如果該函式的第一個引數為空那麼顯示第三個引數的值,如果第一個引數的值不為空,則顯示第二個
select empno, ename, sal, comm, coalesce(sal+comm, sal, 0)總收入 from emp; |
-
- coalesce()
依次考察各引數表示式,遇到非null 值即停止並返 回該值。
select empno, ename, sal, comm, coalesce(sal+comm, sal, 0)總收入 from emp; |
-
- CASE 表示式
select empno, ename, sal, case deptno when 10 then '財務部' when 20 then '研發部' when 30 then '銷售部' else '未知部門' end 部門 from emp; |
-
- DECODE() 函式 和case 表示式類似,decode() 函式也用於實現多路分支結構
select empno, ename, sal, decode(deptno, 10, '財務部', 20, '研發部', 30, '銷售部', '未知部門') 部門 from emp; |
decode是Oracle獨有的 case是較為通用的
-
- 單行函式巢狀
select empno, lpad(initcap(trim(ename)),10,' ') name, job, sal from emp; |