亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle常用函數有哪些

發布時間:2021-11-10 15:14:11 來源:億速云 閱讀:187 作者:小新 欄目:關系型數據庫

小編給大家分享一下Oracle常用函數有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、大小寫轉換函數

      LOWER

                   LOWER函數用小寫形式替換字符串中的大寫字符。語法:LOWER(s).

                   select lower(100+100),lower('SQL'),lower(sysdate) from dual;

      UPPER

                   UPPER函數用大寫形式替換字符串中的小寫字符。語法:UPPER(s).

                   select upper('sql') from dual;

      INITCAP

                   INITCAP函數將字符串轉換為首字母大寫的形式。字符串中每個單詞的第一個字母都被轉換為大寫形式,面每個單詞余下的字母被轉換為小寫字母形式。單詞之間用空格或者下劃線分開,但有些字符(如百分比符號(%)、感嘆號(!)或者美元符號($))也都是有效的單詞分隔符。標點符號和特殊字符也是有效的單詞分隔符。語法:INITCAP(s)

                   select initcap('init cap or init_cat or init%cap') from dual;

二、字符操作函數

      CONCAT

                   CONCAT函數連接兩個字符字面值、列或者表達式從而生成一個更大的字字符表達式。語法:CONCAT(s1,s2)

                   select concat('Today is:',SYSDATE) FROM DUAL;

                   CONCAT只能使用兩個參數

                   select concat('Outer1 ',concat('Inner1',' Inner2')) from dual;

      LENGTH

                   LENGTH函數返回組成字符串的字符數。空格、制表符和特殊字符都被LENGTH函數計算在內。只有一個參數,LENGTH(s)。(制表符算1)

                   select length('ab cd e') from dual;

      LPAD和RPAD

                   LPAD(RPAD)函數返回給定字符串左(右)邊填充指定數量的字符后形成的合成字符串。用于填充的字符串包括字符字面值、列值、表達式、空格(默認)、制表符和特殊字符。

                   LPAD和RPAD函數有三個參數,語法:RPAD(s,n,p)和LPAD(s,n,p)。s表示源字符串,n表示返回字符串的最終長度,p指定用于填充的字符串。

                   select LPAD('abc',6,'*'),RPAD('abc',6,'*') from dual;

      TRIM

                   TRIM函數從字符值的開頭或結尾刪除一些字符,從面生成一個更簡短的字符項。

                   TRIM函數使用的參數由一個強制組成部分和一個可選組成部分構成。語法:TRIM([trailing|leading|both] trimstring from s)。被修整的字符串(s)是強制的。只能指定一個修正字符。

                            TRIM(s)刪除輸入字符串兩邊的空格。

                            TRIM(trailing trimstring from s) 從字符串s的結尾刪除所有trimstring(如果存在的話)。

                            TRIM(leading trimstring from s) 從字符串s的開頭刪除所有trimstring(如果存在的話)。

                            TRIM(both trimstring from s) 從字符串s的開頭和結尾刪除所有trimstring(如果存在的話)。

                            select trim(both '*' from '*****Hidden*****'),trim(leading '*' from '*****Hidden*****'),trim(trailing '*' from '*****Hidden*****'),trim(both from '  Hidden   '),trim(trailing from '  Hidden'),trim(leading from 'Hidden   ') from dual;

        RTRIM

                    RTRIM函數從字符值的結尾刪除一些字符,從而生成一個更簡短的字符串。
                    語法:RTRIM(string[,trimstring]),被修整的string是必須的,可以刪除多個字符。默認刪除空格。
                    select rtrim('abcd  ') from dual;
                    select rtrim('abcd***','*') from dual;                    select rtrim('abcd*#','*#') from dual;

       LTRIM

                    LTRIM函數從字符值的開頭刪除一些字符,從而生成一個更簡短的字符串。
                    語法:RTRIM(string[,trimstring]),被修整的string是必須的,可以刪除多個字符。默認刪除空格。
                    select ltrim('  abcd') from dual;
                    select ltrim('***abcd','*') from dual;                    select ltrim('*#abcd','*#') from dual;

      INSTR

                   INSTR函數確定搜索字符串在給定字符串內的位置。它返回數字位置,在這個位置上,搜索字符串開始第n次出現(相對于指定的起始位置而言)。如果搜索字符串不存在,則返回0.

                   INSTR函數使用兩個可選參數和兩個強制參數。語法:INSTR(source string,search string,[search start position],[nth occurrence])。search start position的默認值是1或者source string的開頭。nth occurrence 的默認值是1或者第一次出現。

                   select instr('1#3#5#7#9#','#') from dual;

                   從左第1個字符往右,返回'#'第1次出現的位置。

                   select instr('1#3#5#7#9#','#',5) from dual;

                   從左第5個字符往右,返回'#'第1次出現的位置。

                   select instr('1#3#5#7#9#','#',3,4) from dual;

                   從左第3個字符往右,返回'#'第4次出現的位置。

                   select instr('1#3#5#7#9#','#',3,10) from dual;

                   從左第3個字符往右,返回'#'第10次出現的位置,沒有找到返回0.

                   select instr('1#3#5#7#9#','#',-1) from dual;

                   從右第1個字符往左,返回'#'第1次出現的位置。

                   select instr('1#3#5#7#9#','#',-1,3) from dual;

                   從右第1個字符往左,返回'#'第3次出現的位置。

                   select instr('1#3#5#7#9#','#',-3,3) from dual;

                   從右第3個字符往左,返回'#'第3次出現的位置。

      SUBSTR

                   SUBSTR函數從給定源字符串中給定的位置開始,提取指定長度的字符串。如果起始位置大于源字符串的長度,就會返回null。如果從給定起始位置提取的字符數大于源字符串的長度,返回的部分是從起始位置到字符串結尾的子字符串。

                   SUBSTR函數有三個參數,前兩個是強制的。語法:SUBSTR(source string,start position,[number of characters to extract])。要提取的默認字符數是從start position 到source string 結尾的字符數。

                   select substr('1#3#5#7#9#',5) from dual;

                   從從左到右數第5個字符處開始提取,從左到右提取,一直到源字符串結尾。

                   select substr('1#3#5#7#9#',5,3) from dual;

                   從從左到右數第5個字符處開始提取,從左到右提取,提取3個字符。

                   select substr('1#3#5#7#9#',-3,2) from dual;

                   從從右到左數第3個字符處開始提取,從左到右提取,提取2個字符。

            select substr('1#3#5#7#9#',-3,-2) from dual;

                    空

      REPLACE

                   REPLACE函數用替換項取代源字符串中出現的所有搜索項。如果替換項的長度與搜索項的長度不同,那么返回字符串的長度與源字符串的長度也不同。如果沒有找到搜索字符串,就會原封不動的返回源字符串。

                   REPLACE函數有三個參數,前兩個是強制的。語法:REPLACE(source string,search item[,replacement term])。如果省略replacement term參數,就會從source string 中刪除所有出現的search item。

                   select replace('1#3#5#7#9#','#','->') from dual;

                   select replace('1#3#5#7#9#','#') from dual;

      TRANSLATE

三、數字函數

      ROUND

                   ROUND函數依據指定的小數精度對數值進行舍入運算。返回依據有效數字以指定的小數精度進行上舍入或者下舍入的值。如果指定的的小數精度為n,則要舍入的有效數據在小數點右邊(n+1)個位置。如果n為負數,那么要舍入的有效數字在小數點右邊n個位置。如果有效數據的數據大于或者等于5,就進行“上舍入”,其他情況進行“下舍入”。

                   ROUND函數有兩個參數。語法:ROUND(source number,decimal precision)。source number參數表示任何數字值。decimal precision參數指定舍入的精度,它是可選的。如果沒有指定decimal precision參數,則舍入的默認精度是0,也就是說將源數字舍入為最接近的整數。

                   select round(1601.916,1) from dual;

                   select round(1601.916,2) from dual;

                   select round(1601.916,-1) from dual;

                   select round(1601.916,-3) from dual;

                   select round(1601.916) from dual;

      TRUNC

                   TRUNC函數依據指定的小數精度對數據執行截取運算。數字截取不同于舍入,如果小數精度的正數的話,最后的值依據指定的小數精度刪除數字,并不進行向上或者向下舍入。然而,如果指定的小數精度(n)為負數,輸入值從小數點左邊第n個數位開始向后歸0。

                   TRUNC函數有兩個參數。語法:TRUNC(source number,decimal precision)。Source number表示任何數字值。Decimal precision指定截取的精度,它是可選的。如果沒有指定decimal precision參數,那么默認精度為0,即將source number截取到最接近的整數。

                   select trunc(1601.916,1) from dual;

                   select trunc(1601.916,2) from dual;

                   select trunc(1601.916,-1) from dual;

                   select trunc(1601.916,-3) from dual;

                   select trunc(1601.916) from dual;

      MOD

                   MOD函數返回除法運算的余數。提供兩個數——被除數和除數,執行除法運算。如果除數是被除數的因數,MOD就返回0,因為沒有余數。如果除數等于0,則返回no division by zero錯誤,MOD函數也返回0。如果除數大于被除數,那么MOD函數返回被除數作為結果。

                   MOD函數有兩個參數。語法:MOD(dividend,divisor)。dividend和divisor參數都可以表示數字字面值、列或者表達式。可以是正數也可以是負數。

                   select mod(6,2) from dual;

                   select mod(5,3) from dual;

                   select mod(7,35) from dual;

                   select mod(5.2,3) from dual;

                   select mod(-5,3) from dual;

                   MOD函數通常用來區分奇數和偶數。

四、日期函數

      SYSDATE

                   SYSDATE函數沒有參數,它返回數據庫服務器當前的系統日期和時間。

                   select sysdate from dual;

      日期運算

                   Date1-Date2=Num1

                   可以從另一個日期中減去日志。這兩個日期項之間的差值表示它們之間的天數。可以將所有數字(包括小數)添加到日期項或者從日期項中減去。在該上下文中,數字表示天數。數字和日期項之間的和或者差值總是返回日期項。不允許相加、相乘或者相除兩個日期項。

                   select to_date('31-jan-01')-to_date('01-jan-01') from dual;

                   select sysdate + 1 from dual;

      MONTHS_BETWEEN

                   MONTHS_BETWEEN函數返回表示兩個強制的日期參數之間月數的數值。語法:MONTHS_BETWEEN(date1,date2)。計算date1和date2之間朋份的差值(每月31天)。如果date1在date2之前就反加負數。這兩個日期參數之間的差值可能由整數和小數部分組成。整數表示這兩個日期之間的朋數。小數部分表示計算年和月之間整數差值這后剩余的天數和時間,以31天的月份為基礎。如果要比較的日期的日組成部分相同或者是各自月份的最后一天,那么就返回沒有小數部分的整數。

                   select months_between(sysdate,sysdate-31) from dual;

                   select months_between('29-mar-2008','28-feb-2008') from dual;

                   select months_between('29-mar-2008','28-feb-2008')*31 from dual;

      ADD_MONTHS

                   ADD_MONTHS函數返回日期項,這個日期項通過將指定月數添加到給定日期計算得出。

                   ADD_MONTHS函數有兩個強制參數。語法:ADD_MONTHS(start date,number of months)。在將指定的月數添加到start date之后,函數才計算目標日期。月數可能是負數,這樣返回的目標日期就早于起始日期。number of months可以是小數,但會忽略小數部分,而使用整數部分。

                   select add_months('07-APR-2009',1) from dual;

                   select add_months('07-APR-2009',2.5) from dual;

                   select add_months('07-APR-2009',-12) from dual;

      NEXT_DAY

                   NEXT_DAY函數返回的日期是星期內指定的日子下一次出現時的日期。

                   NEXT_DAY函數有兩個強制參數。語法:NEXT_DAY(start date,day of the week)。函數計算在start date之后day of the week參數下一次出現的日期。day of the week參數可以是字符值或者整數值。可接受的值由NLS_DATE_LANGUATE數據庫參數確定,但默認值至少是日子名稱的前三個字符或者整數值,其中1表示星期日,2表示星期一,以此類推。在任何情況下都應該指定表示星期幾的字符值。簡短名稱可以大于三個字符,例如星期日可以表示為sun、sund、sunda或者sunday。

                   select next_day('01-JAN-2009','tue') from dual;

                   select next_day('01-JAN-2009','WEDNE') from dual;

                   select next_day('01-JAN-2009',5) from dual;

      LAST_DAY

                   LAST_DAY函數返回指定日子所屬的月的最后一天的日期。

                   LAST_DAY函數有一個強制參數。語法:LAST_DAY(start date)。該函數提取start date參數所屬的月,并計算該月最后一天的日期。

                   select LAST_DAY('01-JAN-2009') from dual;

      日期ROUND

                   日期ROUND函數依據指定的日期精度格式對值進行舍入運算。返回的值要么向上舍入要么向下舍入為最接近的日期精度格式。

                   日期ROUND函數使用一個強制參數和一個可選參數。語法:ROUND(source date[,date precision format])。source date參數表示任意日期項。date precision format參數指定舍入的精度,是可選的,如果沒有指定,默認的舍入精度是日。date precision formats 包括世紀(CC)、年(YYYY)、季度(Q)、月(MM)、星期(W)、日(DD)、時(HH)和分(MI)。

                   向上傳入到世紀相當于給當前世紀加1個世紀。如果日部分大于16,就會向上舍入到下一個月,否則就會向下舍入到當月的開頭。如果月在1和6之間,那么舍入到年就會返回當年開頭的日期,否則返回下一年開頭的日期。

                   select round(sysdate) day,round(sysdate,'w') week,round(sysdate,'month') month,round(sysdate,'year') year from dual;

                   select round(sysdate,'cc') cc,round(sysdate,'q') q,round(sysdate,'hh'),round(sysdate,'mi') min hour from dual;

      日期TRUNC

                   日期TRUNC函數依據指定的日期精度格式對值進行截取運算。

                   日期TRUNC函數使用一個強制參數和一個可選參數。語法:TRUNC(source date[,date precision format])。source date參數表示任意日期項。date precision format 參數指定截取的精度,它是可選的,如果沒有指定,默認的截取精度是日。即source date的所有時間部分都設置為午夜(00:00:00)。月級別上的截取將source date的日期設置為該月的第一天。年級別上的截取返回當年開頭的日期。

                 select trunc(sysdate) day,trunc(sysdate,'w') week,trunc(sysdate,'month') month,trunc(sysdate,'year') year from dual;

五、隱式數據類型轉換

         如果可能,可以將數據類型與函數所需參數的數據類型不相符的值隱式轉換為所需的格式。VARCHAR2和CHAR數據類型統稱為字符類型。字符字段非常靈活,幾乎允許存儲所有類型的信息。因此,可以方便地將DATE和NUMBER值轉換為它們的字符形式。這些轉換稱為數字到字符(number to character)和日期到字符(date to character)轉換。

         select length(1234567890) from dual;

         select length(0123456789) from dual;

         select length(sysdate) from dual;.

       將字符數據隱式轉換為數字數據類型的情況并不常見,因為出現這種情況的唯一條件是該字符數據表示有效數字。

         當字符串符合下面的日期格式時,可以實現隱式字符到日期(character to date)的轉換:[D|DD] separator1 [MON|MONTH] separator2 [R|RR|YY|YYYY]。D和DD分別表示月份中1位和2位的日子。MON是月的三字符縮寫詞,而MONTH是月的全名。R和RR分別表示滿意位和2位數字的年。YY和YYYY分別表示2位和4位數字的年。separator1和separator2元素可以是大多數標點符號、空格和制表符。

         '24-JAN-09'        DD-MON-RR

         '1\\january/8'      D\\MONTH/R

         '13*jan*8'         DD*MON*R

         '13/feb/2008'      DD/MON/YYYY

         '01$jan/08'        DD$MON/RR

         '24-JAN-09 18:45'  DD-MON-RR HH24:MI

六、轉換函數

      TO_CHAR函數將數據轉換為字符

                   TO_CHAR函數返回VARCHAR2數據類型的值。當將它應用于NUMBER數據類型的值時TO_CHAR(num1[,format mask[,nls_parameters]])

                   num參數是強制性的,它必須是一個數字值。可選的format參數用來指定數字格式信息——例如寬度、貨幣符號、小數點的位置和組(或者千位)分隔符,必須將它們包含在單引號內。除此之外,對于要轉換為字符的數字而言,還有其他一些格式信息的選項。

                   select to_char(00001) from dual;

                   select to_char(00001,'099999') from dual;

TO_CHAR函數將數據轉換為字符

格式元素

元素說明

格式

數字

字符結果

9

數字寬度

9999

12

12

0

顯示前面的0

09999

0012

00012

.

小數點的位置

09999.999

030.40

00030.400

D

小數分隔符的位置(默認為名點)

09999D999

030.40

00030.400

,

逗號的位置

09999,999

03040

00003,040

G

組分隔符的位置(默認為逗號)

09999G999

03040

00003,040

$

美元

$099999

03040

$003040

L

當地貨幣

L099999

03040

GBP003040(如果nls_currency設置為GBP)

MI

表示負數的減號的位置

99999MI

-3040

3040-

PR

包圍在括號內的負數

99999PR

-3040

<3040>

EEEE

科學計數法

99.99999EEEE

121.976

1.21976E+02

U

Nls_dual_currency

U099999

03040

CAD003040(如果nls_dual_currency設置為CAD)

V

乘以10n次(n是V之后9的數量)

9999V99

3040

304000

S

前面加上+或者-

S999999

3040

+3040

 TO_CHAR函數將日期轉換為字符

                            使用TO_CHAR函數,可以利用各種格式模型將DATE項轉換為幾乎所有日期的字符表示形式。

                            語法:TO_CHAR(date1[,format[,nls_parameter]])

                            只有date1參數是強制的,date1必須是可以被隱式轉換為日期的值。可選的format參數區分大小寫,必須獎它包含在單引號內。格式掩碼指定哪些日期元素,是用長的名稱還是用縮寫名稱來描述這個元素。還會自動給日和月的名稱填充空格。可以使用格式掩碼的修飾符來刪除這些空格,這個修飾符稱為填充模式(fm)運算符。在格式模型之前添加字母fm,就會命令Oracle從日和月的名稱中刪除所有空格。對于被轉換為字符串的日期而言還有許多格式選項。

                            select to_char(sysdate) || ' is today''s date' from dual;

                            select to_char(sysdate,'Month') || 'is special time ' from dual;

                            select to_char(sysdate,'fmMonth') || 'is special time ' from dual;

to_char把日期轉換為字符串

假設格式元素作用于日期02-JUN-1975

格式元素

說明

結果

Y

年的最后一位

5

YY

年的最后兩位

75

YYY

年的最后三位

975

YYYY

4位數字表示的年

1975

RR

兩們數字表示的年(已知世紀)

75

YEAR,year,Year

區分大小寫并用英語拼寫的年

NINETEEN SEVENTY FIVE,

Nineteen seventy five,

Nineteen Seventy Five

MM

兩位數表示的月

06

MON,mon,Mon

月的三個字母縮寫

JUN,jun,Jun

MONTH,month,Month

區分大小寫并用英語拼寫的月

JUNE,june,June

D

星期的第幾天

2

DD

月的兩位數日

02

DDD

年的日

153

DY,dy,Dy

星期的三個字母縮寫

MON,mon,Mon

DAY,day,Day

區分大小寫并用英語拼寫的星期

MONDAY,Monday,Monday

提取日期時間數據類型的時間部分,表中使用的日期為27-JUN-2010 21:35:13

格式元素

說明

結果

AM,PM,A.M.和P.M.

子午線指示器

PM

HH、HH2和HH24

一天的小時,1-12時和0-23時

09,09,21

MI

分(0~59)

35

SS

秒(0~59)

13

SSSSS

午夜之后的秒(0~86399)

77713

其他一些能夠在日期時間格式模型中使用的元素。標點符號用來分隔格式元素。有三種類型的后綴可以格式化日期時間元素的組件。而且,如果將字符字面值包含在雙引號內,那么就能夠在返回值中包含它們。使用日期12/SEP/08 14:31

格式元素

說明和格式掩碼

結果

/ . , ? # ! -

標點符號:’MM.YY’

09.08

“any character literal”

字符字面值:’”Week” W “of” Month’

Week 2 of September

TH

位置或者序數文本:’DDth ”of” Month’

12TH of September

SP

拼寫出數字:’MmSP month Yyyysp’

Nine September Two Thousand Eight

THSP or SPTH

拼寫出位置或者序數:’hh34SpTh’

Fourteenth

           使用TO_DATE函數將字符轉換為日期

                   TO_DATE函數返回DATE類型的值。轉換為日期的字符串可能包含所有或者部分組成DATE的日期時間元素。當只轉換包含日期時間元素子集的字符串時,Oracle提供資金默認值來構造完整的日期。字符串的組成部分通過格式模型或掩碼與不同的日期時間元素相關聯。

                   語法:TO_DATE(string1[,format,[nls_parameter]])

                   只有string1參數是強制性的,如果沒有提供格式掩碼,string1會隱式轉換為日期。幾乎總是使用可選的fromat參數,在單引號內指定它,與TO_CHAR的格式掩碼相同。TO_DATE函數有fx修飾,表示string1和格式掩碼必須完全匹配,否則報錯。

                   select to_date('25-DEC-2010') from dual;

                   select to_date('25-DEC') from dual; --錯誤

                   select to_date('25-DEC','DD-MON') from dual;

                   select to_date('25-DEC-2010 18:03:45','DD-MON-YYYY HH24:MI:SS') from dual;

                   select to_date('25-DEC-10','fxDD-MON-YYYY') from dual;--錯誤

            TO_NUMBER函數將字符轉換為數字

                   TO_NUMBER函數返回NUMBER類型的值。轉換為數字的字符串必須有合適的格式,以便用相應的格式掩碼轉換或刪除所有非數字組成部分。

                   語法:TO_NUMBER(string1[,format,[nls_parameter]])

                   只有string1參數是強制性的,如果沒有提供格式掩碼,string1就必須是可以隱式轉換為數字的值。用單引號指定可選的format參數。與TO_CHAR轉換數字到字符串中的格式掩碼相同。

                   select to_number('$1,000.55') from dual;--錯誤

                   select to_number('$01,000.55','$0999,999.999') from dual;

                   注:TO_NUMBER函數將字符項轉換為數字。如果使用較短的格式掩碼轉換數字,就會返回錯誤,如果使用較長的格式掩碼轉換數字,就會返回原數字。

七、條件函數

      NVL

                   NVL函數評估任何數據類型的列或者表達式是不是空值。如果原始項是空值,返回備選的非空值;否則,返回原始項。

                   NVL函數有兩個強制參數。語法:NVL(original,ifnull)。其中original表示要測試的項,如果original項計算為空,就返回ifnull。original和ifnull參數的數據類型必須一致。它們必須是相同的類型,或者可能將ifnull隱式轉換為original參數的類型。NVL函數返回值的數據類型與original參數的數據類型相同。

                   select nvl(1234) from dual;--錯誤

                   select nvl(null,1234) from dual; ---1234

                   select nvl(substr('abc',4),'No substring exists') from dual;

      NVL2

                   NVL2函數是對NVL函數的增強,但功能非常類似。NVL2函數評估任何數據類型的列或者表達式是不是空值。如果第一項不是空值,那么返回第二個參數,否則返回第三個參數。

                   NVL2函數有三個強制參數。語法:NVL2(original,ifnotnull,ifnull),其中original表示被測試的項。如果original不是空值,就返回ifnotnull;如果original是空值,就返回ifnull。ifnotnull和ifnull參數的數據類型必須一致或者ifnull參數可以轉換為ifnotnull參數的數據類型,它們不能是LONG數據類型。它們可以是相同的類型,或者可以將ifnull轉換為ifnotnull參數的類型。NVL2函數返回的數據類型與ifnotnull參數的數據類型相同。

                   select nvl2(1234,1,'a string') from dual; --錯誤

                   select nvl2(null,1234,5678) from dual;  --5678

                   select nvl2(substr('abc',2),'Not bc','No substring') from dual;

      NULLIF

                   NULLIF函數測試兩項的相等性。如果它們相等,函數就返回空值,否則返回這兩個測試項的第一項。

                   NULLIF函數有兩個可以是任何數據類型的強制參數,兩個參數類型必須一致,第一個參數不可以為空。語法:NULLIF(ifunequal,comparison_term),其中比較參數ifunequal和comparison_term。如果它們相同,返回NULL。如果它們不同,返回ifunequal參數。

                   select nullif(1234,1234) from dual;

                   select nullif('24-JUL-2009','24-JUL-09') from dual;

                   select nullif(1,null) from dual;  --1

                   select nullif(null,null) from dual;----返回ORA-00932: inconsistent datatypes: expected - got CHAR

      COALESCE

                   COALESCE函數從參數列表中返回第一個非空值。如果所有參數為空,那么返回空值。

                   COALESCE函數有兩個強制參數和任何數量的可選參數。語法:COALESCE(expr1,expr2,...,exprn),如果expr1不是空值,就返回它,否則,如果expr2不是空值,就返回它,以此類推。COALESCE函數是NVL函數的一般形式:

                   COALESCE(expr1,expr2)=NVL(expr1,expr2)

                   COALESCE(expr1,expr2)=NVL(expr1,NVL(expr2,expr3))

                   如果找到非空值,COALESCE返回的數據類型與第一個非空參數的數據類型相同。為了避免出現“ORA-00931:inconsistent date types”錯誤,所有非空參數的數據類型必須與第一個非空參數的數據類型一致。

                   select coalesce(null,null,null,'a string') from dual;

                   select coalesce(null,null,null) from dual;

                   select coalesce(substr('abc',4),'not bc','no substring') from dual;

                   select coalesce(substr('abc',4),'not bc',123) from dual;--錯誤

      DECODE

                   DECODE函數通過測試前兩項的相等性來實現if-then-else條件邏輯,如果它們相等,則返回第三個參數,如果它們不相等,可能返回另一項。

                   DECODE函數至少使用三個強制參數,但可以使用更多參數。語法:DECODE(expr1,comp1,iftrue1[,comp2,iftrue2...[,compN,iftrueN]][,iffalse])。這些參數的計算如下面的偽代碼示例:

                   if expr1 = comp1 then return iftrue1

                            else if expr1 = comp2 then return iftrue 2

                                     ...

                                     ...

                            else if expr1 = compN then return iftrueN

                            else return null | iffalse;

                   DECODE 函數的所有參數都可以是表達式。返回的數據類型與第一個匹配比較選項的數據類型相同的。表達式expr1被隱式轉換為第一個比較參數comp1的數據類型。計算其他比較參數comp2...compn時,也會將它們隱式轉換為comp1相同的數據類型。DECODE 認為兩個空值相等,因此如果expr1是空值,并且comp3是出現的第一個空值比較參數,那么就會返回對應的結果參數iftrue3。

                   select decode(1234,123,'123 is a match') from dual;

                   select decode(1234,123,'123 is a match','No match') from dual;

                   select decode('search','comp1','true1','comp2','true2','search','true3',substr('2search',2,6),'true4','false') from dual;

                   select decode(null,'comp1','true1','comp2','true2',null,'true3','false') from dual;

                   select decode(1234,123,123,'No match') from dual; --‘No match'ORA-01722: invalid number 

      CASE表達式

                   CASE表達式在所有第三和第四代編程語言都可以實現。和DECODE函數一樣,CASE表達式使用if-then-else條件邏輯。CASE表達式有兩個變體。簡單的CASE表達式列出條件搜索項一次,由每個比較表達式來測試與搜索項的相等性。搜索的CASE表達式列出每個比較表達式的單獨條件。

                   CASE表達式至少使用三個強制參數,但可以使用更多參數。其語法取決于是使用簡單CASE表達式還是使用搜索的CASE表達式。

                   簡單CASE表達式的語法:

                            CASE search_expr

                                     WHEN comparison_expr1 THEN iftrue1

                                     [WHEN comparison_expr2 THEN iftrue2

                                               ...

                                      WHEN comparison_exprN THEN iftureN]

                                     [ELSE iffalse]

                            END

                   簡單CASE表達式包含在CASE...END代碼塊內,由至少一個WHEN...THEN語句組成。在最簡單的情況下——只有一個WHEN...THEN語句,search_expr與comparison_expr1進行比較。如果它們相等,姥返回結果iftrue1。如果不相等,那么返回一個空值,除非定義了ELSE組件,這個情況返回默認的iffalse值。當CASE表達式中有多個WHEN...THEN語句時,就會不斷搜索匹配的比較表達式,直到找到匹配項為止。

                   搜索、比較和結果參數可以是列值、表達式或都字面值,但必須都是相同數據類型。

                            select

                                     case substr(1234,1,3)

                                               when '134' then '1234 is a match'

                                               when '1235' then '1235 is a match'

                                               when concat('1','23') then concat('1','23')|| ' is a match'

                                               else 'no match'

                                     end

                            from dual;

                   搜索的CASE表達式的語法:

                            CASE

                                     WHEN condition1 THEN iftrue1

                                     [WHEN condition2 THEN iftrue2

                                      ...

                                      WHEN conditionN THEN iftrueN]

                                     [ELSE iffalse]

                            END

                   搜索的CASE表達式包含在CASE...END代碼塊內,由至少一個WHEN...THEN語句組成。在最簡單的情況下——只有一個WHEN...THEN語句,計算condition1;如果它是true,那么返回結果iftrue1。如果不是,那么就返回一個空值,除非定義了ELSE組件,這種情況下,返回默認的iffalse值。當CASE表達式中有多個WHEN...THEN語句時,就會不斷搜索匹配的比較表達式,直到找到匹配項為止。

                            select

                                     case

                                               when length(substr(1234,1,3)) = 1 then 'length of substring is 1'

                                               when length(substr(1234,1,3)) = 2 then 'length of substring is 2'

                                               when length(substr(1234,1,3)) = 3 then 'length of substring is 3'

                                               else 'no match'

                                     end

                            from dual;

以上是“Oracle常用函數有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

哈巴河县| 胶州市| 从化市| 济源市| 庆城县| 荃湾区| 安泽县| 曲阳县| 班戈县| 绥宁县| 秦皇岛市| 合作市| 平阳县| 海南省| 临海市| 郴州市| 墨竹工卡县| 怀柔区| 昌邑市| 康马县| 墨脱县| 额敏县| 潞西市| 南投县| 江口县| 垫江县| 海丰县| 南漳县| 宝山区| 香河县| 新源县| 专栏| 小金县| 信宜市| 繁昌县| 峨边| 永胜县| 陈巴尔虎旗| 江达县| 拜泉县| 化州市|