十七、Oracle內建函式
阿新 • • 發佈:2018-12-02
Oracle內建函式
1、數值函式
絕對值函式:SELECT ABS(-100),ABS(-100),ABS('-100') FROM dual 取餘函式:SELECT MOD(-100,6),MOD(-100,10),MOD('-100',3) FROM dual 正弦函式:SELECT SIN(9),SIN('9') FROM dual 天花板函式:SELECT CEIL(10),CEIL(10.2),CEIL(-10.2) FROM dual 地板函式:SELECT FLOOR(10),FLOOR(10.2),FLOOR(-10.2) FROM dual 平方根函式:SELECT SQRT(10),SQRT(3) FROM DUAL 指數函式:SELECT POWER(2,2),POWER(3,3) FROM dual 對數函式:SELECT LOG(10,100),LOG(10,2) FROM dual 取整函式:SELECT ROUND(100.2435,4),ROUND(100.2345,-2),ROUND(100.2345,2.25) FROM dual
2、字元函式
ASCII碼轉字元函式:SELECT CHR(65) FROM dual 字元轉ASCII碼函式:SELECT ASCII('楊'),ASCII('A') FROM dual 字串長度函式:SELECT LENGTH('字串長度') FROM dual 擷取字串函式:SELECT SUBSTR('擷取字串長度',1,5) FROM dual 連線字串函式:SELECT CONCAT('連線','字串'),'連線'||'字串' FROM dual 搜尋函式:SELECT INSTR('檢視字串在目標字串中的位置','目標') FROM dual 倒搜尋函式:SELECT INSTR('檢視字串在目標字串中的位置','目標',-1) FROM dual 替換函式:SELECT REPLACE('這是要被替換的,這還是。','是','77')FROM dual 右連線字元函式:SELECT RPAD('連線字元',16,'連到右邊,共八位長度') FROM dual 左連線字元函式:SELECT LPAD('連線字元',16,'連到右邊,共八位長度') FROM dual 左右去空格:SELECT TRIM(' TEST ') FROM dual 去除指定字尾:SELECT TRIM(TRAILING 'T' FROM 'TEST') FROM dual 去除指定字首:SELECT TRIM(LEADING 'T' FROM 'TEST') FROM dual 去除指定前後綴:SELECT TRIM(BOTH 'T' FROM 'TEST') FROM dual
3、日期函式
--系統日期: SELECT sysdate FROM DUAL --系統timestamp: SELECT systimestamp FROM DUAL --資料庫時區: SELECT dbtimezone FROM DUAL --當前時間: SELECT CURRENT_DATE FROM DUAL --SESSIONTIMEZONE函式(當前會話時區): SELECT SESSIONTIMEZONE FROM DUAL --to_char函式: SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL --ADD_MONTHS函式(為日期加上月): SELECT to_char(ADD_MONTHS(TO_DATE('2018-10-12','YYYY-MM-DD'),2),'yyyy-mm-dd hh24:mi:ss') FROM DUAL --LAST_DAY函式: SELECT LAST_DAY(SYSDATE) FROM DUAL --NEXT_DAY函式(返回指定日期下週的星期幾): SELECT SYSDATE,NEXT_DAY(SYSDATE,'星期二') from dual --EXTRACT函式: select extract(year from systimestamp) year ,extract(month from systimestamp) month ,extract(day from systimestamp) day ,extract(minute from systimestamp) minute ,extract(second from systimestamp) second ,extract(timezone_hour from systimestamp) th ,extract(timezone_minute from systimestamp) tm ,extract(timezone_region from systimestamp) tr ,extract(timezone_abbr from systimestamp) ta from dual --months_between函式計算兩個日期之間的相差的月數: select months_between(to_date('2014-3-21','yyyy-mm-dd'), to_date('2014-1-10','yyyy-mm-dd')) ONE, months_between(to_date('2014-1-10','yyyy-mm-dd'), to_date('2014-3-21','yyyy-mm-dd')) TWO, months_between(to_date('2014-1-10','yyyy-mm-dd'), to_date('2014-1-10','yyyy-mm-dd')) THREE from dual; --new_time函式: select to_char(sysdate, 'yyyy.mm.dd hh24:mi:ss') bj_time, to_char(new_time(sysdate, 'PDT', 'GMT'), 'yyyy.mm.dd hh24:mi:ss') los_angles from dual; --Trunc函式:四捨五入 SELECT TRUNC(SYSDATE), -- 今天的日期為 2014-05-08 TRUNC(SYSDATE, 'YYYY'), --返回當年第一天 2014-01-01 yyyy/yy/year 年 TRUNC(SYSDATE, 'MM'), --返回當月第一天 2014-05-01 mm/month 月 TRUNC(SYSDATE, 'DD'), --返回當前年月日 2014-05-08 d/day 周 TRUNC(SYSDATE, 'D'), --(星期天)返回當前星期的第一天 2014-05-04 TRUNC(SYSDATE, 'HH'), --返回當前時間精確小時 2014-05-08 11:00:00 TRUNC(SYSDATE, 'MI') -- 返回當前時間精確分鐘 2014-05-08 11:06:00 TRUNC()函式沒有秒的精確 FROM DUAL; --Round函式:只是 select Round(sysdate, 'Q') Rnd_Q, --2014-04-01 Round(sysdate, 'Month') Rnd_Month, --2014-05-01 Round(sysdate, 'WW') Rnd_Week, --2014-05-07 Round(sysdate, 'W') Rnd_Week_again, --2014-05-08 Round(sysdate, 'DDD') Rnd_day, --2014-05-08 Round(sysdate, 'DD') Rnd_day_again, --2014-05-08 Round(sysdate, 'DAY') Rnd_day_of_week, --2014-05-11 Round(sysdate, 'D') Rnd_day_of_week_again, --2014-05-11 Round(sysdate, 'HH12') Rnd_hour_12, --2014-05-08 12:00:00 Round(sysdate, 'HH24') Rnd_hour_24, --2014-05-08 12:00:00 Round(sysdate, 'MI') Rnd_minute --2014-05-08 11:52:00 from dual;
3、字元函式
--字串轉ASCII型別字串函式
SELECT ASCIISTR('測試字串轉ASCII編碼') from dual
--二進位制轉十進位制函式
SELECT BIN_TO_NUM(1),BIN_TO_NUM(1,1),BIN_TO_NUM(1,1,1) FROM DUAL
--資料型別轉換函式
SELECT CAST('123.4567' AS NUMBER(10,2)),
CAST(123.4567 AS VARCHAR2(8)),
CAST(SYSDATE AS VARCHAR2(14)) FROM DUAL;
--CHARTOROWID
SELECT CHARTOROWID('AAAToYAAEAAAALzAAC') FROM DUAL
--ROWIDTOCHAR,返回vchar型別
SELECT ROWIDTOCHAR(ROWID) FROM SYS_DECLARE
--返回vchar2型別
SELECT ROWIDTONCHAR(ROWID) FROM SYS_DECLARE
--字串在字符集間的轉換函式,US7ASCII目標字元型別,WE8ISO8859P1原字元
SELECT CONVERT('測試字串=====','US7ASCII', 'WE8ISO8859P1') FROM DUAL
--to_date函式
select to_date('20170615','yyyy-MM-dd HH24:mi:ss') from dual;//mi是分鐘
select to_date('20170615','yyyy-MM-dd HH24:mm:ss') from dual;//mm會顯示月份
--to_number函式
select to_number('000012134') from dual;
select to_number('88877') from dual;
--TO_CHAR函式
select TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual
select TO_CHAR(123,'$99,999.9') from dual;
4、NULL函式
--返回表示式列表中,結果不為null的表示式
SELECT COALESCE(NULL,9-1,NULL) FROM DUAL
--LNNVL函式:排除指定條件的資料(null也排除)
select * from EMP t where LNNVL(t.deptno>10)
--NVL函式值替換:如果comm為null用-1替代
select ename,NVL(comm, -1) from emp;
--NVL2函式:第一個comm為空用-1,不為空用第二個common
select ename,nvl2(comm,comm,-1) from emp;
5、集合函式
--AVG函式:計算指定列值的平均數
--COUNT函式:計算指定列的記錄條數
--MAX、MIN計算指定列中的最大或者最小值