數據庫學習5-函數

--level層次,級別
--遞歸查詢
SELECT LEVEL,emp.* FROM emp
    START WITH ename = 'KING' --開始位置
      CONNECT BY PRIOR empno = mgr --遞歸條件
        ORDER BY LEVEL;   --排序
       
SELECT LEVEL,lpad(ename,LEVEL*10) FROM emp
    START WITH ename = 'KING' --開始位置
      CONNECT BY PRIOR empno = mgr --遞歸條件
        ORDER BY LEVEL;   --排序
        
/*
 函數: 
  字符函數
  數值函數
  日期函數
  轉換函數
  其他函數和分析函數   
*/       
/*
   字符函數
*/
--ascii 返回字符的ascii碼
SELECT ascii('R') FROM dual;

--chr 
SELECT chr(82) FROM dual;
SELECT chr(ascii('A')) FROM dual;

--concat 連接 相當於連接操作符'||'
SELECT concat('員工的名字:',ename) FROM emp;

--initcap 把首字母轉大寫
SELECT initcap(ename) FROM emp;

--upper 全部轉大寫 lower 全部轉小寫
SELECT upper('abc') FROM dual;
SELECT lower('AaaAAAAaBBbB') FROM dual;

--length
SELECT length('1234') FROM dual;

--substr 開始下標從1開始,第三個參數表示返回結果的長度
SELECT substr('abcdefgh',2) FROM dual;
SELECT substr('abcdefgh',2,3) FROM dual;

--replace 替換
SELECT REPLACE('abcabc','a','A') FROM dual;

--instr 檢索的內容存在返回第一次出現的下標,不存在返回0
SELECT instr('abcabcaerkkk','a') FROM dual;
SELECT instr('abcabcaerkkk','x') FROM dual;
--第三參數開始檢索位置
SELECT instr('abcabcaerkkk','a',2) FROM dual;        
--第四個參數表示出現的次數
SELECT instr('abcabcaerkkk','a',2,2) FROM dual;
SELECT instr('abcabcaerkkk','a',1,3) FROM dual; 

--trim 
--截去兩端的空格
SELECT TRIM(' luk a ') FROM dual;
SELECT TRIM(both FROM ' luk a ') FROM dual;
--截去左邊的空格
SELECT TRIM(leading FROM ' luk a ') FROM dual;
--截去右邊的空格
SELECT TRIM(trailing FROM ' luk a ') FROM dual;
--截去指定的內容
SELECT TRIM(both 'x' FROM 'xxabcxyxxx') FROM dual;
SELECT TRIM(leading 'x' FROM 'xxabcxyxxx') FROM dual;

--ltrim 左截去,rtrim 右截去
SELECT ltrim('xxabcxyxxx','xy') FROM dual;
SELECT rtrim('xxabcxyxxx','xy') FROM dual;

SELECT rtrim(ltrim('abbcacbabSherylabccabba','bac'),'abc') FROM dual;

--lpad, rpad 
--在左邊或右邊粘貼空格,第二個參數表示返回值的長度
SELECT lpad('sheryl',8) FROM dual;
SELECT rpad('sheryl',12) FROM dual;

SELECT lpad('sheryl',9,'k') FROM dual;

--soundex 返回單詞的讀音
SELECT * FROM soundtest 
   WHERE soundex('to')<>soundex(col);
   
/*
 數值函數
 */
--abs() 去絕對值
SELECT abs(-1) FROM dual;

--mod() 取模(取餘)
SELECT MOD(10,4) FROM dual;

--ceil() 取最大整數(如果小數位有值,返回整數+1)
SELECT ceil(10.0001) FROM dual;
--floor() 取最小整數
SELECT floor(10.999999) FROM dual;
--trunc() 
SELECT trunc(10.999999) FROM dual;
--精確到3位小數
SELECT trunc(10.999999,3) FROM dual;

--round 四捨五入
SELECT round(8.5001) FROM dual;
SELECT round(8.49999) FROM dual;

/**
  日期函數
*/
--查看當前日期
SELECT SYSDATE FROM dual;

--add_months() 
--查看下個月的今天
SELECT add_months(SYSDATE,1) FROM dual;
--查看上上個月的今天
SELECT add_months(SYSDATE,-2) FROM dual;

--months_between() 兩個時間點的間隔月份
SELECT months_between(SYSDATE,hiredate),
       hiredate
    FROM emp;

--last_day() 月底的日期
SELECT last_day(SYSDATE) FROM dual;

--next_day() 
SELECT next_day(SYSDATE,'星期四') FROM dual;
SELECT next_day(SYSDATE,'星期五') FROM dual;

--extract() 取得日期的年,月,日
--取得當前年份
SELECT extract(YEAR FROM SYSDATE) FROM dual;
--取得當前月份
SELECT extract(MONTH FROM SYSDATE) FROM dual;
--取得當前日
SELECT extract(DAY FROM SYSDATE) FROM dual;

/*
  轉換函數
*/
--to_date()
--通常insert into操作時
SELECT to_date('2009-08-19','yyyy-mm-dd') FROM dual;
SELECT to_date('2009-08-19','yyyy-mm-dd hh:mi:ss') FROM dual;

--to_char() 轉成字符內容
SELECT to_char(SYSDATE,'yyyymmdd hh:mi:ss') FROM dual;
SELECT to_char(SYSDATE,'yyyymmdd hh24:mi:ss') FROM dual;

/*
  其他函數和分析函數
*/
--nvl():第一個參數is null時返回第二個參數 
SELECT comm,nvl(comm,0) FROM emp;

--nvl2():第一參數is not null時返回第二個參數
--               is null時返回第三個參數
SELECT comm,nvl2(comm,1111,0) FROM emp;

--decode() 
SELECT ename FROM emp;
SELECT ename,decode(ename,'SMITH','史密斯','YAO','姚','ALLEN','艾倫','WARD','華特','屌絲')
 FROM emp;
 
--分析函數 rank() over()
--         dense_rank() over()
SELECT ename,sal,
    row_number() over(ORDER BY sal DESC)
  FROM emp;
  
SELECT deptno,ename,sal,hiredate,
    row_number() over(PARTITION BY deptno ORDER BY sal DESC) n
  FROM emp;


練習:

1.  找出各月最後一天受僱的所有僱員
2.  找出早於12年之前受僱的僱員
3.  找出晚於26年之前受僱的僱員
4.  顯示所有僱員的姓名,將首字母變成大寫
5.  顯示姓名長度正好爲5個字符的僱員
6.  顯示所有僱員的姓名的前三個字符
7.  顯示不帶有'R'的僱員姓名
8.  顯示姓名字段的任何位置,包含'A'的所有僱員的姓名
9.  顯示所有僱員的姓名,用'a'替換所有的'A'
10. 顯示所有僱員的姓名以及滿10年服務年限的日期
11. 顯示所有僱員的姓名和加入公司的年份和月份,
    按僱員受僱日所在月排序,並將最前年份的排在最前面
12. 顯示在一個月爲30天的情況下所有僱員的日薪金,
    忽略餘數(取整)
13. 找出在任何年份的2月受聘的所有僱員
14. 對於每個僱員,顯示其加入公司的天數,忽略餘數(取整)
15. 以年、月和日顯示所有僱員的服務年限
    一年以365天計算,一月以30天計算
16. 查詢出沒有提成或提成等於 0 的員工(使用nvl函數)
17. 最高的部門平均工資是多少
18. 列出在每個部門工作的員工數量,平均工資和平均服務期限

oracle函數 (總共110個函數)

1. ASCII
返回與指定的字符對應的十進制數;
SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual;
A A ZERO SPACE
--------- --------- --------- ---------
65 97 48 32

2. CHR
給出整數,返回對應的字符;
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
趙 A
3. CONCAT
連接兩個字符串;
SQL> select concat(010-,88888888)||轉23 高乾競電話 from dual;
高乾競電話
----------------
010-88888888轉23
4. INITCAP
返回字符串並將字符串的第一個字母變爲大寫;
SQL> select initcap(smith) upp from dual;
UPP
-----
Smith

5.INSTR(C1,C2,I,J)
在一個字符串中搜索指定的字符,返回發現指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的開始位置,默認爲1
J 出現的位置,默認爲1
SQL> select instr(oracle traning,ra,1,2) instring from dual;
INSTRING
---------
9

6.LENGTH
返回字符串的長度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾競 3 北京市海錠區 6 9999.99 7

7.LOWER
返回字符串,並將所有的字符小寫
SQL> select lower(AaBbCcDd)AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd

8.UPPER
返回字符串,並將所有的字符大寫
SQL> select upper(AaBbCcDd) upper from dual;
UPPER
--------
AABBCCDD

9.RPAD和LPAD(粘貼字符)
RPAD 在列的右邊粘貼字符
LPAD 在列的左邊粘貼字符
SQL> select lpad(rpad(gao,10,*),17,*)from dual;
LPAD(RPAD(GAO,1
-----------------
*******gao*******
不夠字符則用*來填滿

10.LTRIM和RTRIM
LTRIM 刪除左邊出現的字符串
RTRIM 刪除右邊出現的字符串
SQL> select ltrim(rtrim( gao qian jing , ), ) from dual;
LTRIM(RTRIM(
-------------
gao qian jing

11.SUBSTR(string,start,count)
取子字符串,從start開始,取count個
SQL> select substr(13088888888,3,8) from dual;
SUBSTR(
--------
08888888

12.REPLACE(string,s1,s2)
string 希望被替換的字符或變量  
s1 被替換的字符串
s2 要替換的字符串
SQL> select replace(he love you,he,i) from dual;
REPLACE(H
----------
i love you

13.SOUNDEX
返回一個與給定的字符串讀音相同的字符串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values(weather);
SQL> insert into table1 values(wether);
SQL> insert into table1 values(gao);
SQL> select xm from table1 where soundex(xm)=soundex(weather);
XM
--------
weather
wether
? 14.TRIM(s from string)
LEADING 剪掉前面的字符
TRAILING 剪掉後面的字符
如果不指定,默認爲空格符  
15.ABS
返回指定值的絕對值
SQL> select abs(100),abs(-100) from dual;
ABS(100) ABS(-100)
--------- ---------
100 100

16.ACOS
給出反餘弦的值
SQL> select acos(-1) from dual;
ACOS(-1)
---------
3.1415927

17.ASIN
給出反正弦的值
SQL> select asin(0.5) from dual;
ASIN(0.5)
---------
.52359878

18.ATAN
返回一個數字的反正切值
SQL> select atan(1) from dual;
ATAN(1)
---------
.78539816

19.CEIL
返回大於或等於給出數字的最小整數
SQL> select ceil(3.1415927) from dual;
CEIL(3.1415927)
---------------
4

20.COS
返回一個給定數字的餘弦
SQL> select cos(-3.1415927) from dual;
COS(-3.1415927)
---------------
-1

21.COSH
返回一個數字反餘弦值
SQL> select cosh(20) from dual;
COSH(20)
---------
242582598

22.EXP
返回一個數字e的n次方根
SQL> select exp(2),exp(1) from dual;
EXP(2) EXP(1)
--------- ---------
7.3890561 2.7182818

23.FLOOR
對給定的數字取整數
SQL> select floor(2345.67) from dual;
FLOOR(2345.67)
--------------
2345

24.LN
返回一個數字的對數值
SQL> select ln(1),ln(2),ln(2.7182818) from dual;
LN(1) LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718 .99999999

25.LOG(n1,n2)
返回一個以n1爲底n2的對數  
SQL> select log(2,1),log(2,4) from dual;
LOG(2,1) LOG(2,4)
--------- ---------
0 2

26.MOD(n1,n2)
返回一個n1除以n2的餘數
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;
MOD(10,3) MOD(3,3) MOD(2,3)
--------- --------- ---------
1 0 2

27.POWER
返回n1的n2次方根
SQL> select power(2,10),power(3,3) from dual;
POWER(2,10) POWER(3,3)
----------- ----------
1024 27

28.ROUND和TRUNC
按照指定的精度進行舍入
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;
ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
56 -55 55 -55

29.SIGN
取數字n的符號,大於0返回1,小於0返回-1,等於0返回0
SQL> select sign(123),sign(-100),sign(0) from dual;
SIGN(123) SIGN(-100) SIGN(0)
--------- ---------- ---------
1 -1 0

30.SIN
返回一個數字的正弦值
SQL> select sin(1.57079) from dual;
SIN(1.57079)
------------
1
? 31.SIGH
返回雙曲正弦的值
SQL> select sin(20),sinh(20) from dual;
SIN(20) SINH(20)
--------- ---------
.91294525 242582598

32.SQRT
返回數字n的根
SQL> select sqrt(64),sqrt(10) from dual;
SQRT(64) SQRT(10)
--------- ---------
8 3.1622777

33.TAN
返回數字的正切值
SQL> select tan(20),tan(10) from dual;
TAN(20) TAN(10)
--------- ---------
2.2371609 .64836083

34.TANH
返回數字n的雙曲正切值
SQL> select tanh(20),tan(20) from dual;
TANH(20) TAN(20)
--------- ---------
1 2.2371609

35.TRUNC
按照指定的精度截取一個數
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;
TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100 124.16

36.ADD_MONTHS
增加或減去月份
SQL> select to_char(add_months(to_date(199912,yyyymm),2),yyyymm) from dual;
TO_CHA
------
200002
SQL> select to_char(add_months(to_date(199912,yyyymm),-2),yyyymm) from dual;
TO_CHA
------
199910

37.LAST_DAY
返回日期的最後一天
SQL> select to_char(sysdate,yyyy.mm.dd),to_char((sysdate)+1,yyyy.mm.dd) from dual;
TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;
LAST_DAY(S
----------
31-5月 -04

38.MONTHS_BETWEEN(date2,date1)
給出date2-date1的月份
SQL> select months_between(19-12月-1999,19-3月-1999) mon_between from dual;
MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date(2000.05.20,yyyy.mm.dd),to_date(2005.05.20,yyyy.mm.dd)) mon_betw from dual;
MON_BETW
---------
-60

39.NEW_TIME(date,this,that)
給出在this時區=other時區的日期和時間
SQL> select to_char(sysdate,yyyy.mm.dd hh24:mi:ss) bj_time,to_char(new_time
2 (sysdate,PDT,GMT),yyyy.mm.dd hh24:mi:ss) los_angles from dual;
BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32

40.NEXT_DAY(date,day)
給出日期date和星期x之後計算下一個星期的日期
SQL> select next_day('18-5月-2001','星期五') next_day from dual;
NEXT_DAY
----------
25-5月 -01

41.SYSDATE
用來得到系統的當前日期
SQL> select to_char(sysdate,dd-mm-yyyy day) from dual;
TO_CHAR(SYSDATE,
-----------------
09-05-2004 星期日
trunc(date,fmt)按照給出的要求將日期截斷,如果fmt=mi表示保留分,截斷秒
SQL> select to_char(trunc(sysdate,hh),yyyy.mm.dd hh24:mi:ss) hh,
2 to_char(trunc(sysdate,mi),yyyy.mm.dd hh24:mi:ss) hhmm from dual;
HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00

42.CHARTOROWID
將字符數據類型轉換爲ROWID類型
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;
ROWID ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

43.CONVERT(c,dset,sset)
將源字符串 sset從一個語言字符集轉換到另一個目的dset字符集
SQL> select convert(strutz,we8hp,f7dec) "conversion" from dual;
conver
------
strutz

44.HEXTORAW
將一個十六進制構成的字符串轉換爲二進制

45.RAWTOHEXT
將一個二進制構成的字符串轉換爲十六進制

46.ROWIDTOCHAR
將ROWID數據類型轉換爲字符類型

47.TO_CHAR(date,format)
SQL> select to_char(sysdate,yyyy/mm/dd hh24:mi:ss) from dual;
TO_CHAR(SYSDATE,YY
-------------------
2004/05/09 21:14:41
? 48.TO_DATE(string,format)
將字符串轉化爲ORACLE中的一個日期

49.TO_MULTI_BYTE
將字符串中的單字節字符轉化爲多字節字符
SQL> select to_multi_byte(高) from dual;
TO
--
高

50.TO_NUMBER
將給出的字符轉換爲數字
SQL> select to_number(1999) year from dual;
YEAR
---------
1999

51.BFILENAME(dir,file)
指定一個外部二進制文件
SQL>insert into file_tb1 values(bfilename(lob_dir1,image1.gif));

52.CONVERT(x,desc,source)
將x字段或變量的源source轉換爲desc
SQL> select sid,serial#,username,decode(command,
2 0,none,
3 2,insert,
4 3,
5 select,
6 6,update,
7 7,delete,
8 8,drop,
9 other) cmd from v$session where type!=background;
SID SERIAL# USERNAME CMD
--------- --------- ------------------------------ ------
1 1 none
2 1 none
3 1 none
4 1 none
5 1 none
6 1 none
7 1275 none
8 1275 none
9 20 GAO select
10 40 GAO none

53.DUMP(s,fmt,start,length)
DUMP函數以fmt指定的內部數字格式返回一個VARCHAR2類型的值
SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;
GLOBAL_NAME DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

54.EMPTY_BLOB()和EMPTY_CLOB()
這兩個函數都是用來對大數據類型字段進行初始化操作的函數

55.GREATEST
返回一組表達式中的最大值,即比較字符的編碼大小.
SQL> select greatest(AA,AB,AC) from dual;
GR
--
AC
SQL> select greatest(啊,安,天) from dual;
GR
--
天

56.LEAST
返回一組表達式中的最小值  
SQL> select least(啊,安,天) from dual;
LE
--
啊

57.UID
返回標識當前用戶的唯一整數
SQL> show user
USER 爲"GAO"
SQL> select username,user_id from dba_users where user_id=uid;
USERNAME USER_ID
------------------------------ ---------
GAO 25

58.USER
返回當前用戶的名字
SQL> select user from dual;
USER
------------------------------
GAO

59.USEREVN
返回當前用戶環境的信息,opt可以是:
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看當前用戶是否是DBA如果是則返回true
SQL> select userenv(isdba) from dual;
USEREN
------
FALSE
SQL> select userenv(isdba) from dual;
USEREN
------
TRUE
SESSION
返回會話標誌
SQL> select userenv(sessionid) from dual;
USERENV(SESSIONID)
--------------------
152
ENTRYID
返回會話人口標誌
SQL> select userenv(entryid) from dual;
USERENV(ENTRYID)
------------------
0
INSTANCE
返回當前INSTANCE的標誌
SQL> select userenv(instance) from dual;
USERENV(INSTANCE)
-------------------
1
LANGUAGE
返回當前環境變量
SQL> select userenv(language) from dual;
USERENV(LANGUAGE)
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
返回當前環境的語言的縮寫
SQL> select userenv(lang) from dual;
USERENV(LANG)
----------------------------------------------------
ZHS
TERMINAL
返回用戶的終端或機器的標誌
SQL> select userenv(terminal) from dual;
USERENV(TERMINA
----------------
GAO
VSIZE(X)
返回X的大小(字節)數
SQL> select vsize(user),user from dual;
VSIZE(USER) USER
----------- ------------------------------
6 SYSTEM
? 60.AVG(DISTINCT|ALL)
all表示對所有的值求平均值,distinct只對不同的值求平均值
SQLWKS> create table table3(xm varchar(8),sal number(7,2));
語句已處理。
SQLWKS> insert into table3 values(gao,1111.11);
SQLWKS> insert into table3 values(gao,1111.11);
SQLWKS> insert into table3 values(zhu,5555.55);
SQLWKS> commit;
SQL> select avg(distinct sal) from gao.table3;
AVG(DISTINCTSAL)
----------------
3333.33
SQL> select avg(all sal) from gao.table3;
AVG(ALLSAL)
-----------
2592.59

61.MAX(DISTINCT|ALL)
求最大值,ALL表示對所有的值求最大值,DISTINCT表示對不同的值求最大值,相同的只取一次
SQL> select max(distinct sal) from scott.emp;
MAX(DISTINCTSAL)
----------------
5000

62.MIN(DISTINCT|ALL)
求最小值,ALL表示對所有的值求最小值,DISTINCT表示對不同的值求最小值,相同的只取一次
SQL> select min(all sal) from gao.table3;
MIN(ALLSAL)
-----------
1111.11

63.STDDEV(distinct|all)
求標準差,ALL表示對所有的值求標準差,DISTINCT表示只對不同的值求標準差
SQL> select stddev(sal) from scott.emp;
STDDEV(SAL)
-----------
1182.5032
SQL> select stddev(distinct sal) from scott.emp;
STDDEV(DISTINCTSAL)
-------------------
1229.951

64.VARIANCE(DISTINCT|ALL)
求協方差  
SQL> select variance(sal) from scott.emp;
VARIANCE(SAL)
-------------
1398313.9

65.GROUP BY
主要用來對一組數進行統計
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
10 3 8750
20 5 10875
30 6 9400

66.HAVING
對分組統計再加限制條件
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400

67.ORDER BY
用於對查詢到的結果進行排序輸出
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;
DEPTNO ENAME SAL
--------- ---------- ---------
10 KING 5000
10 CLARK 2450
10 MILLER 1300
20 SCOTT 3000
20 FORD 3000
20 JONES 2975
20 ADAMS 1100
20 SMITH 800
30 BLAKE 2850
30 ALLEN 1600
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
30 JAMES 950  
68. pl/sql中的case語句
select (case when DUMMY='X' then 0 else 1 end) as flag from dual;  
case的第1種用法:
case col when 'a' then 1
when 'b' then 2
else 0 end
這種用法跟decode一樣沒什麼區別
case的第2種用法:
case when score <60 then 'd'
when score >=60 and score <70 then 'c'
when score >=70 and score <80 then 'b'
else 'a' end
69.NVL(expr1, expr2)
NVL(expr1, expr2)->expr1爲NULL,返回expr2;不爲NULL,返回expr1。注意兩者的類型要一致  
NVL2 (expr1, expr2, expr3) ->expr1不爲NULL,返回expr2;爲NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換爲expr2的類型  
NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1



1.  字符函數

函數名

作用

參數個數及說明

掌握級別

備註

ASCII()

字符的ASCII碼

1個字符或字符串

瞭解

 

CHR

ASCII相反

1個整數或小數

瞭解

 

CONCAT

連接

2個內容連在一起

熟悉

 

INITCAP

首字母大寫

1個字符或串

熟悉

 

INSTR

搜索字符

2參數:1被檢索的內容 2檢索的內容

 

4參數:1被檢索的內容2檢索的內容3開始位置4出現位置(第幾次出現)

熟悉

 

LENGTH

字符長度

1 內容的長度 

熟悉

 

LOWER

全文轉小寫

1個字符或串

熟悉

 

UPPER

全文轉大寫

1個字符或串

熟悉

 

LPAD [RPAD]

左右粘貼

3參數:1字符串或整數2位置3粘貼的字符串或整數

瞭解

 

LTRIM [RTRIM]

左右截掉

2參數:1被截字符串或整數2須截掉內容
注:如果只有1參數,即截掉左邊或右邊空格

瞭解

 

TRIM

截掉

指定參數:from、both、trailing、leading

用法舉例:

TRIM(‘ luka ’)

TRIM(both from ‘ luka ’)

結果是去兩端空格
TRIM(trailing from ‘ luka ’)

結果是去後面的空格

TRIM(leading from ‘ luka ’)

結果是去前面的空格

TRIM(both ‘x’ from ‘xxlukaxx’)

結果是去前後所有的’x’,’luka’

熟悉

TRIM只能截去單一字符信息,結合LTRIM和RTRIM可以去多個字符信息

SUBSTR

取子串

3參數:1被取字符串2開始位置3取得字符個數

熟悉

 

REPLACE

替換

3參數:1被替字符串2被替換的內容
3替換的內容

熟悉

 

SOUNDEX

讀音是否相同

單詞讀音

瞭解

 

 

 

 

 

 

 

2.  數學函數

函數名

作用

參數個數及說明

掌握級別

備註

ABS

求絕對值

1

熟悉

 

ACOS

求反餘弦值

 

聽過

 

ASIN

求反正弦值

 

聽過

 

ATAN

求反正切值

 

聽過

 

CEIL

取最大整數

1

熟悉

 

COS

求餘弦值

 

聽過

 

COSH

求反餘弦值

 

聽過

 

EXP

e的N次方根

 

聽過

 

FLOOR

取最小整數

1

熟悉

 

LN

對數

 

聽過

 

LOG

指定對數

 

聽過

 

MOD

取模

2

熟悉

 

POWER

求次方

2

瞭解

 

ROUND

四捨五入

1

熟悉

 

SIGN

取數字符號

1

瞭解

 

SIN

求正弦值

 

聽過

 

SIGH

求雙曲正弦值

 

聽過

 

SORT

求數字的根

1

瞭解

 

TAN

求正切值

 

聽過

 

TANH

求雙曲正切值

 

聽過

 

TRUNC

指定精度截取

2

熟悉

 

 

3. 日期函數

函數名

作用

參數個數及說明

掌握級別

備註

ADD_MONTHS

增加或減去月份

 

熟悉

 

LAST_DAY

日期的最後一天

 

熟悉

 

MONTHS_BETWEEN

日期間隔月數

 

熟悉

 

NEW_TIME

新時區的日期時間

 

瞭解

 

NEXT_DAY

下一個日期

 

熟悉

 

SYSDATE

當前日期

 

熟悉

 

 

4. 轉換函數

函數名

作用

參數個數及說明

掌握級別

備註

CHARTOROWID

字符轉換成rowid類型

 

聽過

 

CONVERT

轉換字符集

 

瞭解

 

HEXTORAW

十六進制轉二進制

 

瞭解

 

RAWTOHEXT

二轉十六進制

 

瞭解

 

ROWIDTOCHAR

rowid類型轉換成字符類型

 

聽過

 

TO_CHAR

轉換成字符

 

熟悉

 

TO_DATE

轉換成日期

 

熟悉

 

TO_MULTI_BYTE

 

 

聽過

 

TO_NUMBER

轉換成數字

 

熟悉

 

 

5. 其他函數

函數名

用法說明

備註說明

NVL

NVL (expr1, expr2)->expr1爲NULL,返回expr2;不爲NULL,返回expr1。注意兩者的類型要一致CNOUG博客首頁{9^r7Yc

 

NVL2

NVL2 (expr1, expr2, expr3) ->expr1不爲NULL,返回expr2;爲NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換爲expr2的類型CNOUG博客首頁Mj'LPuwR

 

NULLIF

相等返回NULL,不等返回expr1

 

COALESCE

COALESCE(expr1, expr2, ... expr n)返回第一個不爲空的參數,參數個數不受限制

 

DECODE

DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等於if1時,DECODE函數的結果返回then1,...,如果不等於任何一個if值,則返回else。

 

ROW_NUMBER

返回一個唯一的值,當碰到相同數據時,排名按照記錄集中記錄的順序依次遞增。

分析函數

RANK

返回一個唯一的值,除非遇到相同的數據時,此時所有相同數據的排名是一樣的,同時會在最後一條相同記錄和下一條不同記錄的排名之間空出排名。

分析函數

DESC_RANK

返回一個唯一的值,除非當碰到相同數據時,此時所有相同數據的排名都是一樣的。

分析函數

 



發佈了108 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章