Oracle常用函數總結

Oracle函數,當任意一個參數為空字符串或者null時,結果返回null

聚合函數

count

使用方式有5種

select count(*) from student;--統計總行數
select count(0) from student;--統計總行數,括號里面的0表示什么意思?
select count(id) from student;--統計列id不為null的總行數select count(rowid) from student;--統計總行數select count(distinct id) from student;--統計id不為null并且去掉id重復的總行數

ps:前面四種count的方式,在沒有索引的情況是一樣的,都會全表掃描。選中SQL按F5會打開解釋計劃窗口,可以看到前四種count的方式執行過程都是一樣。如果有索引,一般情況下,count(*),count(0),count(rowid)會走索引,count(id)走索引掃描還是走全表掃描要看字段id是否有索引。

sum

select sum(idno) from student;--任意行的idno不能為非數字,可以為null

avg

select avg(idno) from student;--計算之前會把null值排除在外

max

select max(idno) from student;--

列中的數據可以是數值、字符串或是日期時間數據類型,會忽略null值,但是如果所有的值都為null,則會返回null,字符串是怎么比較大小的?

min

select min(idno) from student;--同上

字符函數

大小寫

select lower(name) from dual; --lower()轉小寫
select upper(name) from dual; --upper()轉大寫
select initcap(name) from dual; --initcap()首字母大寫

非英文字母不會進行轉換,但任然會查詢出來,null值也會查詢出來

數據內容合并

select concat(id,name) from student;--concat函數只能是兩個參數,多行數據內容合并成一行可以使用||

字符串截取

substr

只針對字符類型

select substr('HelloWorld',0,3) value from dual;--返回結果:Hel,截取從“H”開始3個字符
select substr('HelloWorld',1,3) value from dual;--返回結果:Hel,截取從“H”開始3個字符
select substr('HelloWorld',2,3) value from dual;--返回結果:ell,截取從“e”開始3個字符
select substr('HelloWorld',0,100) value from dual;--返回結果:HelloWorld,100雖然超出預處理的字符串最長度,但不會影響返回結果,系統按預處理字符串最大數量返回。
select substr('HelloWorld',5,3) value from dual;--返回結果:oWo
select substr('Hello World',5,3) value from dual;--返回結果:o W (中間的空格也算一個字符串,結果是:o空格W)
select substr('HelloWorld',-1,3) value from dual;--返回結果:d (從后面倒數第一位開始往后取1個字符,而不是3個。)
select substr('HelloWorld',-2,3) value from dual;--返回結果:ld (從后面倒數第二位開始往后取2個字符,而不是3個。)
select substr('HelloWorld',-3,3) value from dual;--返回結果:rld (從后面倒數第三位開始往后取3個字符)
select substr('HelloWorld',-4,3) value from dual;--返回結果:orl (從后面倒數第四位開始往后取3個字符)select substr('HelloWorld',0) value from dual;--返回結果:HelloWorld,截取所有字符
select substr('HelloWorld',1) value from dual;--返回結果:HelloWorld,截取所有字符
select substr('HelloWorld',2) value from dual;--返回結果:elloWorld,截取從“e”開始之后所有字符
select substr('HelloWorld',3) value from dual;--返回結果:lloWorld,截取從“l”開始之后所有字符
select substr('HelloWorld',-1) value from dual;--返回結果:d,從倒數一個“d”開始,截取所有字符
select substr('HelloWorld',-2) value from dual;--返回結果:ld,從倒數第二個“l”開始,截取所有字符
select substr('HelloWorld',-3) value from dual;--返回結果:rld,從倒數第三個“r”開始,截取所有字符

trunc

trunc可以對日期進行格式化,有關日期的格式參數,參考https://blog.csdn.net/qq_26565861/article/details/83110968

trunc可以對數字進行截取,與round的區別是不進行四舍五入

字符串長度計算

--length計算字符數,lengthb計算字節數,編碼方式為UTF8/GBK時,一個中文占3/2個字節長度
select length('hello你好') from dual;
select lengthb('hello你好') from dual;

查找字符的位置

select instr('helloworld', 'o') from dual;--instr從左向右找第一次出現的位置,從1開始
select instr('helloworld', 'z') from dual;--找不到返回0

填充

select lpad('hello',10,'#')from dual;--lpad如果位數不夠,從左邊開始補位
select lpad('hello',10)from dual;--第三個參數不傳時,用空格
select lpad('甲骨文',10,'$') from dual;--注意字符集編碼為UTF8時中文也是占用兩個長度
select rpad('hello',3,'#')from dual;--rpad如果位數不夠,從右邊邊開始補位

去除空格

--基本用法,注意全角空格去不掉
SELECT trim('    aaa  bbb  ccc     ')  trim FROM dual;
SELECT ltrim('    aaa  bbb  ccc     ')  trim FROM dual;
SELECT rtrim('    aaa  bbb  ccc     ')  trim FROM dual;
--高級用法,去除特定字符 trim( leading | trailing | both string1 FROM string2) 注意string1只能是單個字符,如果沒有設置string1參數,默認去除空字符串
SELECT trim(leading  '$'  from  '$aaa  bbb  ccc$')  FROM dual;
SELECT trim(trailing  '$'  from  '$aaa  bbb  ccc$')  FROM dual;
SELECT trim(both '$'  from  '$aaa  bbb  ccc$')  FROM dual; 
SELECT trim(both  from  '  aaa  bbb  ccc  ')  FROM dual;  

字符串替換

select replace('heLLo','LL','ll') from dual;
select replace('heLLo','LL') from dual;--未設置第三個參數時表示用空字符串替換

數字函數

四舍五入

--第二個參數為正整數表示小數點后多少位,0表示取整,負數表示小數點前n+1位
select   round(1234.5678,4)   from   dual;
select   round(1234.5678,3)   from   dual;
select   round(1234.5678,0)   from   dual;
select   round(1234.5678,-1)   from   dual;
--對日期處理
select round(to_date('2003-10-15','yyyy-mm-dd'),'month')from dual;
select round(to_date('2003-10-16','yyyy-mm-dd'),'month')from dual;
select round(to_date('2003-6','yyyy-mm'),'year')from dual;
select round(to_date('2003-7','yyyy-mm'),'year')from dual;

轉換函數

to_char

日期類型轉字符串TO_CHAR(DATETIME)

select ? to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') ? from ? dual;

關于日期格式不同符號代表什么意思,可以參考https://blog.csdn.net/qq_26565861/article/details/83110968

數字格式化TO_CHAR(NUMBER)

select to_char(1234,'9,9,9,9')   from dual;
select to_char(1234.34,'9,9,9,9.99')   from dual;
select to_char(1234.34,'9,9,9,9.$99')    from dual;

更多數字格式化的參數,參考https://blog.csdn.net/jinlong5200/article/details/3135949

把NCLOB,CLOB,NCHAR轉換為VARCHAR2 TO_CHAR(CHARACTER)

to_date

參考https://blog.csdn.net/qq_26565861/article/details/83110968

to_number

可以將char和varchar2類型轉換成number類型

select to_number('$234234.4350','$999999.0000') from dual;
格式值含義
9代表一個數字
0強迫0顯示
$顯示美元符號
L強制顯示一個當地的貨幣符號
.顯示一個小數點
,?顯示一個千位分隔符號

cast

cast可以進行數據類型轉換

語法:cast( 列名/值 as 數據類型 )

select cast(1 as varchar2(10))  from dual;
select cast('1' as number) from dual;

判斷函數

decode

用來判斷值是否相等,語法格式為:decode(列或值,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

具體含義為:如果列或值等于第一個值,那么返回第一個返回值,如果等于第二個值,那么返回第二個返回值,否則返回缺省值

select decode('小米','華為','android','三星','android','蘋果','ios','其他') from dual;
select decode('小米','華為','android','三星','android','蘋果','ios') from dual;--如果沒有設置默認值參數,返回null

nvl

語法:NVL(參數1,參數2 )

含義:如果參數1不為null,則返回參數1,否則返回參數2

select nvl('測試','默認值') from dual;

nvl2

語法:nvl2(參數1,參數2,參數3)

含義:如果參數1不為null,返回參數2,否則返回參數3

select nvl2('','參數2','參數3') from dual;
select nvl2('參數1','參數2','參數3') from dual;

nullif

語法:NULLIF (參數1,參數2)

含義:若兩個參數相等,返回NULL;不相等,等返回參數1

其他函數

ROW_NUMBER()OVER

一對多取多的一方最新的一條數據,分類(PARTITION BY)排序(ORDER BY )

SELECT * FROM(SELECT u.*,ROW_NUMBER()OVER(PARTITION BY p.user_id ORDER BY p.flush_time desc)RNFROM STS_LPATROL_APPUSER_T uleft JOIN STS_LPATROL_PHONEDEV_T p ON u.user_id=p.user_id)T where? RN=1

pivot

行轉列:將多行數據轉換成一行數據的多個列

create table tb_student_grade(name varchar2(50),id varchar2(32),course varchar2(50),grade number);insert into tb_student_grade(name,id,course,grade) values('cc','1','math',100);
insert into tb_student_grade(name,id,course,grade) values('cc','1','chinese',110);
insert into tb_student_grade(name,id,course,grade) values('cc','1','english',120);insert into tb_student_grade(name,id,course,grade) values('cc','2','math',100);
insert into tb_student_grade(name,id,course,grade) values('cc','2','chinese',110);
insert into tb_student_grade(name,id,course,grade) values('cc','2','english',120);insert into tb_student_grade(name,id,course,grade) values('lp','3','math',50);
insert into tb_student_grade(name,id,course,grade) values('lp','3','chinese',60);
insert into tb_student_grade(name,id,course,grade) values('lp','3','english',70);commit;select * from tb_student_grade pivot(max(grade) for course in('math' as 數學,'chinese' as 語文,'english' as 英語));

unpivot

列轉行:將一行數據的多個列轉換成多行數據

select * from tb_student_grade pivot(max(grade) for course in('math' as 數學,'chinese' as 語文,'english' as 英語)) unpivot(grade for course in(數學,語文,英語));

合并多行數據

wm_concat

用來將分組后的多行數據合并成一行

select t.deptno,wm_concat(t.ename) from emp t group by t.deptno;

ename拼接的順序不是按照ename來的

listagg

select t.deptno,listagg(t.ename,':') within group (order by t.ename) from emp t group by t.deptno;

ename拼接的順序可以按照某個字段來,拼接的字符也可以指定。是11g新增的函數

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JAVA基礎篇】==、equals和hashCode的區別和聯系

作用:比較兩個操作數的關系,返回一個boolean類型的結果 具體含義:如果兩個操作數是基本數據類型,比較值是否相等。如果兩個操作數是引用類型,那么比較的是內存地址是否相同。 equals Object類的實例方法&#xff0c…

【JAVA基礎篇】內部類

定義在一個類內部的類稱為內部類。內部類訪問權限可以是public、protected、default或private,可以聲明為abstract供其他內部類或外部類繼承,可以聲明為static、final,也可以實現特定的接口。外部類可以訪問內部類的所有方法與屬性&#xff0…

【JAVA基礎篇】訪問權限

所謂訪問權限,指的是本類的成員變量、成員方法和內部類對其他類的可見性。 四種訪問權限 Java一共有四種訪問權限,按照權限由大到小分別為public、protected、default和private,如果省略了訪問修飾符,那訪問權限就是defualt。四…

Oracle存儲過程

什么是存儲過程 存儲過程是一組為了完成特定功能的SQL語句,經編譯后存在數據庫,存儲過程是數據庫中的一個重要對象。 ps:有人說:任何一個設計良好的數據庫應用程序都應該用到存儲過程,我覺得這個不一定,其實很多互聯…

解決debug JDK source無法查看局部變量的問題

首先進入傳送門:https://blog.csdn.net/majian_1987/article/details/51273609 進行上面的操作之后,這個時候我們來debug一下jdk源碼,發現可以查看局部變量。但是這時候又發現一個問題,在我自己的代碼里按住ctrl鼠標左鍵單擊無法…

【JAVA基礎篇】多線程

學習Java的多線程知識之前,我們先來了解一下進程和線程的概念,以及他們之間的關系。 進程 基本概念 進程是具有獨立功能的程序在某個數據集合上的一次執行過程。 特點 進程是操作系統進行資源分配的基本單位。每個進程都有自己的地址空間&#xff0…

配置JAVA開發環境

1、首先去Oracle官方網站下載所需版本的JDKhttp://java.sun.com/products/archive/,然后安裝,其實只需要安裝jdk就可以了,不需要安裝jre 2、按照后配置環境變量JAVA_HOME 然后在path最前面添加%JAVA_HOME%\bin; 3、cmd中輸入java -version,提…

【JAVA基礎篇】枚舉

/*** 一組相同類型的常量的集合* author cc**/ public class EnumDemo {public static void main(String[] args) {//遍歷for(WorkDay workDay:WorkDay.values()){System.out.println("序號:"workDay.ordinal());//ordinal,返回枚舉常量的序號…

【JAVA基礎篇】集合框架

一、集合框架圖 Java集合框架主要包含兩種類型的容器,一是集合(Collection),存儲元素集合,二是圖(Map),存儲鍵(key)-值(value)對.Collection接口下面有兩個重要的子接口List和Set,再下面是一些抽象類,最后是…

【JAVA基礎篇】對象初始化過程

我們都知道,創建對象是由 new關鍵字調用構造方法 返回類實例(實際上還可以通過反射來創建實例)。 例如 : Person jack new Person(); 這句話到底做了什么事情呢 ? 其實就是講對象的初始化過程。 1、 new 用到了Person.class,所…

【Java基礎篇】try catch finally語句包含return語句時的執行過程

網上有很多人探討Java中異常捕獲機制try…catch…finally塊中的finally語句是不是一定會被執行? 很多人都說不是,當然他們的回答是正確的,經過我試驗,至少有兩種情況下finally語句是不會被 try語句沒有被執行到,如在…

eclipse指定JDK版本啟動,解決version XXX of the JVM is not suitable for this product.Version:XXX 問題

問題描述:啟動eclipse時,提示version 1.7.0 of the JVM is not suitable for this product.Version:1.8 or greater is required. 原因分析:原因是我的筆記本安裝了多個JDK版本,但是現在我的JAVA_HOME配置的是jdk1.7的路徑&#x…

【JAVA基礎篇】Socket編程

一、Socket的概念 Socket是一種通訊機制,通常稱為套接字。英文原意是插座,顧明思義,Socket像是一個多孔插座,可以提供多個端口的連接服務 ps:至于socket在計算機術語中怎么就翻譯成了“套接字”這個令人費解的詞,這真…

【JAVA基礎篇】注解

一、什么是注解? 注解是元數據,所謂元數據就是描述數據的數據。 在annotation誕生之前(jdk1.5誕生了注解),甚至之后,xml被廣泛的由于描述元數據。但是后來,有一些應用開發工程師和架構師覺得它…

【JAVA基礎篇】IO流

一、流的概念 “對語言設計人員來說,創建好的輸入/輸出系統是一項特別困難的任務。” ――《Think in Java》 無論是系統、還是語言的設計中IO的設計都是異常復雜的。面臨的最大的挑戰一般是如何覆蓋所有可能的因素,我們不僅僅要考慮文件、…

SpringMVC注解

一,RequestMapping 可以用在類和方法上 1.1 作用: 將客戶端請求映射到可匹配的類和方法中 1.2 屬性: name 給映射指定一個名字 path(同value相同) 請求的url,path{"/mixedAttribute1","/mixedA…

【JAVA基礎篇】運算符

一、表達式 表達式由運算符和操作數組成 例如: 5 num1 num1num2 sumnum1num2 二、運算符分類 算數運算符、賦值運算符、關系運算符、邏輯運算符、條件運算符、位運算符 三、算數運算符 四、賦值運算符 格式:變量表達式 例如:int n3…

a4紙網頁打印 table_打印模板不愁人,你還在打印單調的A4紙嗎?

軟件介紹早在幾年前,社會上就已經開始了數字化、無紙化的推廣,但是就算再怎么無紙化,紙張還是有它必要的存在,在工作、學習過程中,打印的需求也必不可少的。但是一般的打印都是比較平庸的,要做會議記錄&…

IP地址、子網掩碼、網關、默認網關、DNS的理解

IP地址 Internet上為了區分數以億計的主機而給每個主機分配一個專門的地址,通過IP地址可以訪問到每臺主機。 子網掩碼 子網掩碼又稱網絡掩碼、地址掩碼、子網絡遮罩。它是用來指明一個IP地址哪些位標識的是主機所在的子網,以及哪些位標識的是主機的位…

上證指數30年k線圖_技術預判2020:上證指數要突破3500點才會“井噴”

2019年的行情很快就要收官了,截止目前,上證指數今年的漲幅是20.5%,不過可能有部分投資者今年的收益率還沒達到大盤指數的平均水平。不管怎樣,今年很快就要翻篇了,關鍵是看2020年股市能不能迎來更好的行情了。而總結得失…