Oracle資料庫學習心得(二)
20、單行函式:每次執行函式,傳入一行列值,返回一個結果;多行函式:每次執行函式,傳入多行列值,返回一個結果 21、字元型函式: (1)大小寫轉換:lower(小寫)、upper(大寫)、initcap(首字母大寫) (2)拼接字串:concat,例 select concat(‘hello’,‘world’) from dual; (3)擷取字串:substr,擷取字串,資料庫的字串下標從1開始,例:
select substr('abcdefg',3) from dual;--cdefg select substr('abcdefg',3,2) from dual;--cd select substr('abcdefg',-3) from dual;--efg select substr('abcdefg',-3,2) from dual;--ef
(4)字串長度:length,例:
select length('abcd') from dual;--4
select length('') from dual;--null
(5)查詢字串下標,找不到返回0:instr,例:
select instr('abcdefg','cd') from dual;--3 select instr('abcdefg','xxx') from dual;--0 select instr('abcdefgabcdefg','cd',4) from dual;--10,跳過前3個,從下標4開始查詢 select instr('abcdefgabcdefg','cd',-1) from dual;--負數表示反方向查詢 select instr('abcdefgabcdefg','cd',1,1) from dual;--查詢第n次出現的位置
(6)左填充:lpad;右填充:rpad。如果位數不足會填充,但是空值會返回null,例:
select lpad('abcd',7,'#') from dual;--###abcd
select rpad('abcd',7,'*') from dual;--abcd***
select lpad('',7,'#') from dual;--null
(7)修剪兩邊指定字元:trim,只能修剪兩邊,而不能修剪中間的值,例:
select trim('a' from 'aaabcdaaefgaa') from dual;--bcdaaefg select trim('b' from 'aaabcdaaefgaa') from dual;--aaabcdaaefgaa
(8)替換字串:raplace,例:
select replace('abcdefgabcd','cd','#') from dual;--ab#efgab#
22、數字型函式: (1)取模運算:mod,例:
select mod(5,3) from dual;--2
(2)截斷:trunc,例:
select trunc(3.1415927) from dual;--3
select trunc(3.1415927,3) from dual;--3.141
(3)四捨五入:round,例:
select round(3.1415927,3) from dual;--3.142
(4)進位取整:ceil,例:
elect ceil(3.0001) from dual;--4
23、日期型函式: (1)當前系統時間:sysdate,例:
select sysdate from dual;--2018/10/13 18:25:06
(2)oracle中日期型別沒有常量這一說,預設日期字串格式dd-mon-rr,例:‘01-1月-18’ (3)兩個日期型別可以做加減法,返回兩個日期間隔天數 (4)求兩個日期間隔的月:months——between(第一個日期,第二個日期) (5)日期加減若干月,返回一個新的date型別資料:add_months(日期,加減的月[加是正數, 減是負數]) (6)返回指定日期下一個最近的星期幾的日期,1~7代表日到六:next_day(日期,星期幾/數字) (7)返回指定日期的最後一天:last_day(日期) (8)四捨五入日期:round(日期) (9)日期的截斷:trunc(日期) (10)數字和日期不能做任何的型別轉換 (11)把一個日期按照指定格式轉換為字串:to_char(日期,格式),例:
select '現在的時間是:'|| to_char(sysdate,'yyyy-mm-dd') from dual;
select '現在的時間是:'|| to_char(sysdate,'mm/dd/yyyy') from dual;
select '現在的時間是:'|| to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select '現在的時間是:'|| to_char(sysdate,'yyyy-mm-dd day') from dual;
select '現在的時間是:'|| to_char(sysdate,'yyyy-mm-dd d') from dual;--1~7代表日~六
(12)按照指定格式把字串解析為日期型別:to_date(字串,格式),例:
select to_date('2019-1-1','yyyy-mm-dd')-sysdate from dual;--79.221712962963
(13)字串轉換為數字:to_number,例:
select to_number('$8000','$9999') from dual;--8000
24、通用函式:可以操作任何型別,主要針對於空值 (1)nvl(引數1,引數2):引數1如果為空,則返回引數2,返回引數1,例:
select nvl(1,2) from dual;--1
select nvl(null,2) from dual;--2
(2)nvl2(引數1,引數2,引數3):引數1如果不為空,返回引數2,否則返回引數3,例:
select nvl2(1,2,3) from dual;--2
select nvl2(null,2,3) from dual;--3
(3)nullif(引數1,引數2):兩個引數相等,返回null,否則返回引數1,例:
select nullif(1,2) from dual;--1
select nullif(1,1) from dual;--2
(4)coalesce(引數1,引數2,……):返回第一個非空引數值,例:
select coalesce(1,2,3,4) from dual;--1
select coalesce(null,null,3,4) from dual;--3