日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

oracle常用的字符和字符串处理类函数

發(fā)布時(shí)間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle常用的字符和字符串处理类函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#####################################
# 常用的字符和字符串處理類(lèi)函數(shù)
#####################################

# LOWER函數(shù)
作用:將字符串轉(zhuǎn)換成為小寫(xiě)字母
示例:
??? select firstname,lastname from customers
??? where LOWER(lastname) = 'nelson';
# UPPER函數(shù)
作用:將字符串轉(zhuǎn)換成為大寫(xiě)字母
示例:
??? select firstname,lastname from customers
??? where UPPER(lastname) = 'nelson';

# INITCAP函數(shù)
作用:將字符串轉(zhuǎn)換成為混合大小寫(xiě),每一個(gè)單詞的開(kāi)始都是一個(gè)大寫(xiě)字母,
???????? 其余字符轉(zhuǎn)換成為小寫(xiě)字母。
示例:
??? select firstname,lastname from customers
??? where UPPER(lastname) = 'nelson';

??? select initcap(firstname),initcap(lastname) from customers;??

# SUBSTR函數(shù)
作用:取子串函數(shù)
格式:SUBSTR(C,P,L)????? 其中:C表示字符串,P表示要提取的起始的字符串的位置,
?????????? L表示提取的長(zhǎng)度。如果P為負(fù)值,表示從字符串的
?????????? 最后一位倒著向前取。
示例:
??? select distinct substr(zip,1,3)
??? from customers;
??
??? select distinct substr(zip,1,3),substr(zip,-3,2)
??? from customers;

# LENGTH函數(shù)
作用:確定要分析的字符串的長(zhǎng)度
示例:
??? select destinct length(address)
??? from customers;

# LPAD函數(shù)
作用:用于字符串填充。填充的是字符串左側(cè)的區(qū)域。
格式:LPAD(C,L,S)???????? 其中:C表示將要填充的字符串,L表示填充“之后”字符串
??????????? 的長(zhǎng)度,S表示用于填充的符號(hào)或者字符
示例:
??? select firstname,LPAD(firstname,12,' ')
??? from customers
??? where firstname like '%E%';

# RPAD函數(shù)
作用:用于字符串填充。填充的是字符串右側(cè)的區(qū)域。
格式:RPAD(C,L,S)???????? 其中:C表示將要填充的字符串,L表示填充“之后”字符串
??????????? 的長(zhǎng)度,S表示用于填充的符號(hào)或者字符
示例:
??? select firstname,RPAD(firstname,12,' ')
??? from customers
??? where firstname like '%E%';

# LTRIM函數(shù)

# RTRIM函數(shù)

# REPLACE函數(shù)
作用:用于字符串的替換
格式:REPLACE(C,S,R) 其中:C表示將處理的字符串,S表示想要查找的字符串,R表示
??????????? 將要替換的字符串。類(lèi)似于“查找與替換”功能。
示例:

# CONCAT函數(shù)
作用:字符串連接函數(shù)??? ||

?

?


??
####################################################################
# 數(shù)字函數(shù)
####################################################################

# ROUND函數(shù)
作用:用來(lái)將數(shù)字字段舍入的指定的精度。
格式:ROUND(N,P)
示例:
??? select title,retail,ROUND(RETAIL,1),TRUNC(RETAIL,1)
??? from books;

# TRUNC函數(shù)
作用:用來(lái)將數(shù)字字段截?cái)嗟闹付ǖ木取?br /> 格式:ROUND(N,P)
示例:
??? select title,retail,ROUND(RETAIL,1),TRUNC(RETAIL,1)
??? from books;

?

####################################################################
# 日期函數(shù)
####################################################################

# Oracle的日期函數(shù)以DD-MON-YY格式顯示日期值,這種格式表示兩位的天數(shù),三位的月份簡(jiǎn)寫(xiě)
??? 以及兩位的年份。
??? 例如:20-MAR-02
??
# MONTHS_BETWEEN函數(shù)
作用:表示兩個(gè)月之間相差的天數(shù)
示例:
??? select title,MONTHS_BETWEEN(orderdate,pubdate)
??? from books NATURAL JOIN orders NATURAL JOIN orderitems
??? where order# = 1009;

# ADD_MONTHS函數(shù)
???? 作用:表示在某個(gè)日期之后的時(shí)間
示例:
??? select title,pubdate,ADD_MONTHS(pubdate,60) "Drop Date"
??? from books
??? order by "Drop Date";

# NEXT_DAY函數(shù)
作用:
格式:??? NEXT_DAY(d,DAY)??? 其中:d表示開(kāi)始日期,DAY表示將要確定的一周中的某一天
示例:
??? select order#,orderdate,NEXT_DAY(orderdate,7)
??? from orders
??? where order# = 1010;

# TO_DATE函數(shù)
作用:
示例:
??? select order#,orderdate,shipdate
??? from orders
??? where orderdate = to_date('3-31-2003','MM-DD-YYYY');

##### 日期格式元素的值

??? MONTH??? 全部寫(xiě)出的月份名稱(chēng),添加空格,達(dá)到9個(gè)字符的總寬度 APRIL
??? MON??? 月份名稱(chēng)的三個(gè)字母簡(jiǎn)寫(xiě)?????? APR
??? MM??? 月份的兩位數(shù)字值?????? 04
??? RM??? 羅馬數(shù)字的月份??????? IV
??? D?????????????? 一周中某一天的數(shù)值
??? DD???? 一月中某一天的數(shù)值
??? DDD???????????? 一年中某一天的數(shù)值
??? DAY???????????? 一周中某一天的名稱(chēng),添加空格,達(dá)到9個(gè)字符的寬度??? Wednesday
??? DY??? 一周中某一天的三個(gè)字母簡(jiǎn)寫(xiě)????? WED
??? YYYY??? 顯示4位的年份
??? YYY、YY、Y????? 顯示年份的最后三位、最后兩位或者最后一位
??? YEAR??????????? 全部寫(xiě)出年份
??? B.C. 或者 A.D.

####################################################################
# NVL函數(shù)
####################################################################
作用: 可以使用NVL函數(shù)來(lái)解決對(duì)可能包含NULL值的字段執(zhí)行數(shù)學(xué)運(yùn)算時(shí)導(dǎo)致的問(wèn)題。
??? 在Oracle9i中,NULL值不等于空格或者0。在計(jì)算中使用NULL值時(shí),結(jié)果是NULL值。
??? NVL函數(shù)使用一個(gè)值來(lái)代替現(xiàn)有的NULL值。

??? select order#,orderdate,shipdate,shipdate-orderdate "Delay"
??? from orders;
??? 在執(zhí)行上述查詢時(shí),有一些列是空白的。請(qǐng)注意!

??? select order#,orderdate,NVL(shipdate,to_date('07-4-03','DD-MM-YY')),
??? NVL(shipdate,to_date('07-4-03','DD-MM-YY'))-orderdate "Delay"
??? from orders
??? where order# = 1018;

??? 如果shipdate列的值為NULL,就用'07-04-03'替換shipdate的值。

?

####################################################################
# NVL2函數(shù)
####################################################################

作用: NVL2函數(shù)是NVL函數(shù)的一個(gè)變化形式,他允許不同的選項(xiàng),這取決于是否存在NULL值。
格式: NVL2(x,y,z),其中y表示當(dāng)x不是NULL時(shí)所替換的數(shù)據(jù),z表示當(dāng)x是NULL時(shí)所替換的數(shù)
??? 據(jù)。這使用戶在處理NULL值時(shí)更加靈活。

??? 例如:NVL2(commission,salary,salary+commission)
??? 表示:如果傭金是NULL,那么工資總額就是工資;如果傭金不是NULL,那么就將工資總額計(jì)算為工資加傭金。

??? select order#,orderdate,NVL2(shipdate,'Shipped','NOT SHIPPED') "Status"
??? from orders;

?

####################################################################
# TO_CHAR函數(shù)
####################################################################
作用: 用于將日期和數(shù)字轉(zhuǎn)換為格式化的字符串。
格式:

??? select title,to_char(pubdate,'MONTH??? DD ,YYYY') "Publication Date",
??? to_char(retail,'$9999.99') "Retail Price"
??? from books
??? where isbn = 0401140733;


####################################################################
# DECODE函數(shù)
####################################################################
作用:
格式:

?????? DECODE是Oracle公司獨(dú)家提供的功能,它是一個(gè)功能很強(qiáng)的函數(shù)。它雖然不是SQL的標(biāo)準(zhǔn),
但對(duì)于性能非常有用。到目前,其他的數(shù)據(jù)庫(kù)供應(yīng)商還不能提供類(lèi)似DECODE的功能,甚至有的
數(shù)據(jù)庫(kù)的供應(yīng)商批評(píng)Oracle的SQL不標(biāo)準(zhǔn)。實(shí)際上,這種批評(píng)有些片面或不夠水平。就象有些馬??? 車(chē)制造商抱怨亨利。福特的“馬車(chē)”不標(biāo)準(zhǔn)一樣。
在邏輯編程中,經(jīng)常用到If – Then –Else 進(jìn)行邏輯判斷。在DECODE的語(yǔ)法中,實(shí)際上就是這 樣的邏輯處理過(guò)程。它的語(yǔ)法如下:

DECODE(value, if1, then1,??? if2,then2, if3,then3,??? . . .??? else )

Value 代表某個(gè)表的任何類(lèi)型的任意列或一個(gè)通過(guò)計(jì)算所得的任何結(jié)果。當(dāng)每個(gè)value值被測(cè)試??? ,如果value的值為if1,Decode 函數(shù)的結(jié)果是then1;如果value等于if2,Decode函數(shù)結(jié)果是??? then2;等等。事實(shí)上,可以給出多個(gè)if/then 配對(duì)。如果value結(jié)果不等于給出的任何配對(duì)時(shí),??? Decode 結(jié)果就返回else 。
需要注意的是,這里的if、then及else 都可以是函數(shù)或計(jì)算表達(dá)式。

DECODE實(shí)現(xiàn)表的轉(zhuǎn)置

例子:希望將下面的列結(jié)果按照列的方式來(lái)顯示JOB內(nèi)容:

SQL> select empno,ename,job,sal,deptno from emp
??? 2??? order by deptno,job;

?????? EMPNO ENAME??????? JOB??????????????? SAL?????? DEPTNO
---------- ---------- --------- ---------- ----------
??????? 7934 MILLER?????? CLERK???????????? 1300?????????? 10
??????? 7782 CLARK??????? MANAGER?????????? 2450?????????? 10
??????? 7839 KING???????? PRESIDENT???????? 5000?????????? 10
??????? 7788 SCOTT??????? ANALYST?????????? 3000?????????? 20
??????? 7369 SMITH??????? CLERK????????????? 800?????????? 20
??????? 7876 ADAMS??????? CLERK???????????? 1100?????????? 20
??????? 7566 JONES??????? MANAGER?????????? 2975?????????? 20
??????? 7938 趙元杰?????? 軟件???????????? 12345?????????? 20
??????? 7698 BLAKE??????? MANAGER?????????? 2850?????????? 30
??????? 7499 ALLEN??????? SALESMAN????????? 1600?????????? 30
??????? 7654 MARTIN?????? SALESMAN????????? 1250?????????? 30
??????? 7844 TURNER?????? SALESMAN????????? 1500?????????? 30
??????? 7521 WARD???????? SALESMAN????????? 1250?????????? 30

18 rows selected.

再看下面的查詢結(jié)果:

SQL> select deptno,job,sum(sal) from emp group by deptno,job;

????? DEPTNO JOB?????????? SUM(SAL)
---------- --------- ----------
????????? 10 CLERK???????????? 1300
????????? 10 MANAGER?????????? 2450
????????? 10 PRESIDENT???????? 5000
????????? 20 ANALYST?????????? 3000
????????? 20 CLERK???????????? 1900
????????? 20 MANAGER?????????? 2975
????????? 20 軟件???????????? 74070
????????? 30 MANAGER?????????? 2850
????????? 30 SALESMAN????????? 5600

9 rows selected.


從上面的結(jié)果看,如果希望將JOB置換成列的方式,則只要用DECODE將JOB列進(jìn)行描述即可。創(chuàng)建的視圖如下:

create or replace view empv as
select deptno,
sum( decode(job,'ANALYST', sal,0)) ANALYST,
sum( decode(job,'CLERK', sal,0)) CLERK,
sum( decode(job,'MANAGER', sal,0)) MANAGER,
sum( decode(job,'PRESIDENT', sal,0)) PRESIDENT,
sum( decode(job,'SALESMAN', sal,0)) SALESMAN,
sum( decode(job,'軟件', sal,0)) 軟件
from emp??? group by deptno;

具體運(yùn)行的顯示樣本如下:
SQL> create or replace view empv as
??? 2??? select deptno,
??? 3??? sum( decode(job,'ANALYST', sal,0)) ANALYST,
??? 4??? sum( decode(job,'CLERK', sal,0)) CLERK,
??? 5??? sum( decode(job,'MANAGER', sal,0)) MANAGER,
??? 6??? sum( decode(job,'PRESIDENT', sal,0)) PRESIDENT,
??? 7??? sum( decode(job,'SALESMAN', sal,0)) SALESMAN,
??? 8??? sum( decode(job,'軟件', sal,0)) 軟件
??? 9??? from emp??? group by deptno;

View created.

SQL> select * from empv;

????? DEPTNO????? ANALYST??????? CLERK????? MANAGER??? PRESIDENT???? SALESMAN???????? 軟件
---------- ---------- ---------- ---------- ---------- ---------- ----------
????????? 10??????????? 0???????? 1300???????? 2450???????? 5000??????????? 0??????????? 0
????????? 20???????? 3000???????? 1900???????? 2975??????????? 0??????????? 0??????? 74070
????????? 30??????????? 0??????????? 0???????? 2850??????????? 0???????? 5600??????????? 0

?

?

?


####################################################################
# SOUNDEX函數(shù)
####################################################################

####################################################################
# NESTING函數(shù)
####################################################################

####################################################################
# DUAL表
####################################################################

####################################################################
# SUM函數(shù)
####################################################################

select sum(retail-cost) "Total Profit"
from orderitems NATURAL JOIN books
where order# = 1007;


####################################################################
# AVG函數(shù)
####################################################################

select avg(retail-cost) "Average Profit"
from books
where category = 'COMPUTER';


select to_char(avg(retail-cost),'999.99') "Average Profit"
from books
where category = 'COMPUTER';

####################################################################
# COUNT函數(shù)
####################################################################

select count(distinct category) from books;

select distinct count(category) from books;

select count(*) from orders
where shipdate is null;

select count(shipdate) from orders
where shipdate is null;

????????? 在COUNT函數(shù)中提供的參數(shù)是一個(gè)*時(shí),存在的所有記錄都會(huì)計(jì)算在內(nèi),通過(guò)計(jì)算整個(gè)記錄, Count函數(shù)不會(huì)丟掉NULL值。

####################################################################
# MAX函數(shù)
####################################################################

####################################################################
# MIN函數(shù)
####################################################################

####################################################################
# GROUP BY子句
####################################################################

select category,to_char(avg(retail-cost),'999.99') Profit
from books
group by category

select customer#,order#,sum(quantity*retail) "Order Total"
from orders NATURAL JOIN orderitems NATURAL JOIN books
group by customer#,order#

####################################################################
# HAVING子句
####################################################################

select category,to_char(avg(retail-cost),'999.99') Profit
from books
group by category
having avg(retail-cost)>15;

select category,to_char(avg(retail-cost),'999.99') Profit
from books
where pubdate>to_date('01-01-02','DD-MM-YY')
group by category
having avg(retail-cost)>15;

按照訂單進(jìn)行分組統(tǒng)計(jì),但是只顯示總金額超過(guò)100美元的訂單。

select customer#,order#,sum(quantity*retail) "Order Total"
from orders NATURAL JOIN orderitems NATURAL JOIN books
group by customer#,order#
having sum(quantity*retail)>100;

?

####################################################################
# STDDEV函數(shù)
####################################################################
作用:
??? 計(jì)算指定字段的標(biāo)準(zhǔn)差。“標(biāo)準(zhǔn)差”計(jì)算用來(lái)確定一組數(shù)字中的單個(gè)值與平均值的接近??? 程度。
示例:
??? select category,avg(retail-cost),stddev(retail-cost)
??? from books
??? group by category;

??? 要想解釋標(biāo)準(zhǔn)差計(jì)算的數(shù)值,必須將它與每一個(gè)種類(lèi)的“平均利潤(rùn)”作比較。例如:查???? 看上述結(jié)果中Cooking種類(lèi),圖書(shū)的平均利潤(rùn)是8.60美元。但是大多數(shù)圖書(shū)都接近這個(gè)??? 平均值,還是大多數(shù)圖書(shū)都之產(chǎn)生1美元的利潤(rùn),而一本書(shū)產(chǎn)生了20美元的利潤(rùn)?
??? 標(biāo)準(zhǔn)差就是有多少本書(shū)位于平均值附近的某個(gè)范圍之內(nèi)的統(tǒng)計(jì)近似值。

####################################################################
# VARIANCE函數(shù)
####################################################################

作用: 用來(lái)確定數(shù)據(jù)在一個(gè)組中的分散程度。一組記錄的方差是根據(jù)指定字段的最大值
??? 和最小值計(jì)算的。
??? 如果數(shù)據(jù)值很密集,那么方差就很小;但是如果數(shù)據(jù)包含極端的值(很大或者很小)
??? 那么方差就很大。
示例:
??? select category,variance(retail-cost),min(retail-cost),max(retail-cost)
??? from books
??? group by category;

??? 對(duì)結(jié)果的解釋:
??? 上述查詢結(jié)果列出了BOOKS表中所有圖書(shū)的種類(lèi)、每一個(gè)種類(lèi)的利潤(rùn)方差以及每個(gè)種類(lèi)
??? 中的最小利潤(rùn)和最大利潤(rùn)(為了進(jìn)行比較)。與標(biāo)準(zhǔn)差一樣,如果一組數(shù)據(jù)只包含一個(gè)????? 值,那么計(jì)算得到的方差是0。但是與標(biāo)準(zhǔn)差不同,方差不是用與源數(shù)據(jù)相同的單位計(jì)??? 算的。

??? 要想解釋VARRANCE函數(shù)的結(jié)果,必須查看這個(gè)值有多大或者多小。例如:Cooking種類(lèi)??? 具有比其他種類(lèi)更小的方差。這意味著Cooking種類(lèi)中的圖書(shū)利潤(rùn)更密集(也就是說(shuō),??? 利潤(rùn)沒(méi)有覆蓋更大的范圍)。
????????????????? 看一下Cooking種類(lèi)中的圖書(shū)的最小利潤(rùn)和最大利潤(rùn),注意,利潤(rùn)范圍是2.30美元,
??? (9.75.7.45)。另一方面,我們看看Family Life種類(lèi)。這個(gè)種類(lèi)具有最高方差,如果??? 比較最小利潤(rùn)和最大利潤(rùn),那么他的利潤(rùn)范圍很大。
??? 這就警告管理人員,一些書(shū)可能產(chǎn)生很小的利潤(rùn)。而其他一些可以產(chǎn)生很大的利潤(rùn),可??? 以知道企業(yè)的經(jīng)營(yíng)數(shù)據(jù)。

轉(zhuǎn)載于:https://www.cnblogs.com/zhahost/archive/2008/12/02/1346171.html

總結(jié)

以上是生活随笔為你收集整理的oracle常用的字符和字符串处理类函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。