oracle常用函數總結

--oracle常用函數

select abs(-1) from dual; --絕對值
select mod(10,3) from dual; --取餘數
select sign(-66) from dual; -- 正數返回1; 負數返回-1; 0返回0
select ceil(1.32) from dual; --向上取整   2
select floor(1.99) from dual;  --向下取整       
select trunc(1.2399,3.9) from dual; -- 先對3.9向下取整爲3,再截取小數點後3位
select round(1.2395,3.9) from dual; --先對3.9向下取整爲3,再取小數點後3位四捨五入
select chr(11) from dual;           --將ASCII碼轉化爲字符
select ascii('訂') from dual;       --將字符轉化爲ASCII碼
select length('aaaaa') from dual;  --判斷字符串的長度 5
select substr('abcdefghijk',2,5) from dual;   --截取字符串從第2位開始,截取5位 bcdef
select instr('abcdabcd','a',2,1) from dual;   --判斷字符a在字符串中第2位開始第1次出現的位置5
select instr('abcdabcd','w') from dual; --用來判斷字符串中是否存在字符a 存在返回值大於0
select upper('acd') from dual;    --大寫轉換
select lower('ADcD') from dual;   --小寫轉換
select initcap('you are dog') from dual;--字符首字符大寫

--聚合函數
select avg(dt.djl_age) from djl_test dt;
select max(dt.djl_age) from djl_test dt;
select min(dt.djl_age) from djl_test dt;
select count(dt.djl_age) from djl_test dt;
select sum(dt.djl_age) from djl_test dt;
select * from djl_test for update;
--group by having
--先篩選出年齡大於10的數據,然後再按名次和id分組,分組後展示id需大於4的數據
select max(dt.djl_age), dt.djl_name
  from djl_test dt
  where dt.djl_age > 10
 group by dt.djl_name,dt.djl_id
having dt.djl_id >4;


--聚合函數嵌套  分組查詢出最大的年齡後再刪選最大的年齡
select max(max(dt.djl_age))
  from djl_test dt
  where dt.djl_age > 10
 group by dt.djl_name,dt.djl_id
having dt.djl_id >4;

--通過rownum 進行分頁
select dt.*
  from (select t.*, rownum rn from djl_test t) dt
 where dt.rn between 1 and 3;
--通過rowid 對重複的djl_id 進行除重
delete from djl_test
 where rowid not in (select max(rowid) from djl_test group by djl_id)
 
--ROW_NUMBER() OVER (ORDER BY COLUMN1) 的使用
--先將數據進行排序,然後再取ROWNUM
select dt.*
  from (select t.*, ROW_NUMBER() OVER(ORDER BY djl_age desc) rn from djl_test t) dt
 where dt.rn between 1 and 3;


--ROW_NUMBER() OVER (PARTITION BY COLUMN1 OREDER BY COLUMN2)
--先將數據進行分組,再進行排序,然後再取ROWNUM,每組數據都是ROWNUM 從1開始
select t.*,
       row_number() over(partition by djl_name order by djl_age desc) rn
  from djl_test t   
 
--隨機函數0 - 1.0之間的隨機數
SELECT DBMS_RANDOM.value FROM DUAL;
 
--TRUNC(DBMS_RANDOM.VALUE(A,B)) 隨機產生A-B之間的值
SELECT TRUNC(DBMS_RANDOM.VALUE(1,100)) FROM DUAL;

--查詢表中奇數列
select td.*
  from (select t.*, row_number() over(order by djl_age) rn from djl_test t) td
 where mod(td.rn, 2) = 1

--聚合函數 over() 的使用  查詢出最大的年齡和最小的年齡
select djl_name,djl_age,max(djl_age) over(), min(djl_age) over() from djl_test;

--連續求和 over
select sum(djl_age) over(order by djl_id) from djl_test;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章