oracle--單行函數(shù)

單行函數(shù)

SQL函數(shù):

sql函數(shù).PNG

兩種sql函數(shù)

兩種sql函數(shù).PNG

單行函數(shù)

  1. 操作數(shù)據(jù)對象
  2. 接受參數(shù)返回一個結(jié)果
  3. 只對一行進行變換
  4. 每行返回一個結(jié)果
  5. 可以轉(zhuǎn)換數(shù)據(jù)類型
  6. 可以嵌套
  7. 參數(shù)可以是一列或一個值
單行函數(shù).PNG
一、字符函數(shù)
字符函數(shù).PNG

大小寫控制函數(shù):改變字符的大小寫

大小寫控制函數(shù).PNG
--字符函數(shù)
select lower('Hello World') 轉(zhuǎn)小寫,upper('Hello World') 轉(zhuǎn)大寫,initcap('hello world') 首字母大寫 from dual;

--substr(a,b) 從a中,第b位開始取
select substr('Hello World',3) 子串 from dual;
子串                                                                            
---------                                                                       
llo World 

--substr(a,b,c) 從a中胯府,第b位開始取,取c位
select substr('Hello World',3,4) 子串 from dual;
子串                                                                            
----                                                                            
llo

--instr(a,b) 在a字符串中查找b奕巍,找到了,返回下標(biāo)(從1開始),沒有找到,返回0
select instr('Hello World','ll') 位置 from dual;
      位置                                                                      
----------                                                                      
         3   

 --length 字符數(shù) lengthb 字節(jié)數(shù)
英文:
select length('Hello World') 字符,lengthb('Hello World') 字節(jié) from dual;
      字符       字節(jié)                                                           
---------- ----------                                                           
        11         11 

中文:
select length('北京') 字符,lengthb('北京') 字節(jié) from dual
      字符       字節(jié)                                                           
---------- ----------                                                           
         2          4 

--lpad 左填充  rpad 右填充
-- abcd ---> 10 位
select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;
第一個參數(shù):對誰進行填充
第二個參數(shù):填到多少位
第三個參數(shù):填什么
左         右                                                                   
---------- ----------                                                           
******abcd abcd******    

--trim 去掉前后指定的字符
select trim('H' from 'Hello WorldH') from dual;
TRIM('H'FR                                                                      
----------                                                                      
ello World   

--replace
select replace('Hello World','l','*') from dual;
REPLACE('HE                                                                     
-----------                                                                     
He**o Wor*d  
二、數(shù)字函數(shù):
round:四舍五入(第二個參數(shù)表示保留兩位小數(shù))
round(45.926,2)--->45.93
trunc:截斷
trunc(45.926,2)--->45.92
mod:求余
mod(1600,300)--->100

select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,
  2         round(45.926,-1) 四,round(45.926,-2) 五
  3  from dual;

        一         二         三         四         五                          
---------- ---------- ---------- ---------- ----------                          
     45.93       45.9         46         50          0

--截斷
select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,
  2         trunc(45.926,-1) 四,trunc(45.926,-2) 五
  3* from dual
SQL> /

        一         二         三         四         五                          
---------- ---------- ---------- ---------- ----------                          
     45.92       45.9         45         40          0 
三蔚舀、日期:

Oracle中的日期型數(shù)據(jù)(date)實際含有兩個值:日期和時間

默認的日期格式是:DD-MON-RR

--查詢當(dāng)前時間
SQL> select sysdate  from dual;

SYSDATE
---------
04-MAY-17

to_char():把某個東西,按照某個格式轉(zhuǎn)換成字符串

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

TO_CHAR(SYSDATE,'YY
-------------------
2017-05-04 09:19:58

日期的數(shù)學(xué)運算:

  1. 在日期上加上或減去一個數(shù)字結(jié)果仍為日期
  2. 兩個日期相減返回日期之間相差的天數(shù)
  3. 可以用數(shù)字除24來向日期中加上或減去小時

例如:

--昨天 今天 明天
SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;

昨天           今天           明天                                              
-------------- -------------- --------------                                    
21-11月-15     22-11月-15     23-11月-15 

--計算員工的工齡:天  星期  月 年
SQL> select ename,hiredate, (sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
  2                         (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
  3  from emp;

ENAME      HIREDATE               天       星期         月         年           
---------- -------------- ---------- ---------- ---------- ----------           
SMITH      17-12月-80     12758.6314 1822.66163 425.287713 34.9551545           
ALLEN      20-2月 -81     12693.6314 1813.37591 423.121046 34.7770723           
WARD       22-2月 -81     12691.6314  1813.0902  423.05438 34.7715928           
JONES      02-4月 -81     12652.6314 1807.51877  421.75438 34.6647435           
MARTIN     28-9月 -81     12473.6314 1781.94734 415.787713 34.1743326           
BLAKE      01-5月 -81     12623.6314 1803.37591 420.787713 34.5852915           
CLARK      09-6月 -81     12584.6314 1797.80448 419.487713 34.4784422           
SCOTT      19-4月 -87     10444.6314  1492.0902  348.15438 28.6154285           
KING       17-11月-81     12423.6314 1774.80448 414.121046 34.0373463           
TURNER     08-9月 -81     12493.6314 1784.80448  416.45438 34.2291271           
ADAMS      23-5月 -87     10410.6314 1487.23306 347.021046 28.5222778           

ENAME      HIREDATE               天       星期         月         年           
---------- -------------- ---------- ---------- ---------- ----------           
JAMES      03-12月-81     12407.6314 1772.51877 413.587713 33.9935107           
FORD       03-12月-81     12407.6314 1772.51877 413.587713 33.9935107           
MILLER     23-1月 -82     12356.6314 1765.23306 411.887713 33.8537846        

日期函數(shù):

日期函數(shù).PNG
moths_between:
select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) 二 from emp;

ENAME      HIREDATE               一         二                                 
---------- -------------- ---------- ----------                                 
SMITH      17-12月-80     425.287784 419.181726                                 
ALLEN      20-2月 -81     423.121117 417.084952                                 
WARD       22-2月 -81     423.054451        417                                 
JONES      02-4月 -81     421.754451 415.665597                                 
MARTIN     28-9月 -81     415.787784 409.826888                                 
BLAKE      01-5月 -81     420.787784 414.697855                                 
CLARK      09-6月 -81     419.487784 413.439791                                 
SCOTT      19-4月 -87     348.154451  343.11721                                 
KING       17-11月-81     414.121117 408.181726                                 
TURNER     08-9月 -81     416.454451 410.472049                                 
ADAMS      23-5月 -87     347.021117 341.988178                                 

ENAME      HIREDATE               一         二                                 
---------- -------------- ---------- ----------                                 
JAMES      03-12月-81     413.587784 407.633339                                 
FORD       03-12月-81     413.587784 407.633339                                 
MILLER     23-1月 -82     411.887784 405.988178

--56 個月后
SQL> select add_months(sysdate,56) from dual;

ADD_MONTHS(SYS                                                                  
--------------                                                                  
22-7月 -20  

select last_day(sysdate) from dual;

LAST_DAY(SYSDA                                                                  
--------------                                                                  
30-11月-15                                                                      

--next_day
SQL> --下一個星期日
SQL> select next_day(sysdate,'星期日') from dual;

NEXT_DAY(SYSDA                                                                  
--------------                                                                  
29-11月-15                                                                      

SQL> --下一個星期一
SQL> select next_day(sysdate,'星期一') from dual;

NEXT_DAY(SYSDA                                                                  
--------------                                                                  
23-11月-15  

next_day的應(yīng)用:

每個星期一自動備份數(shù)據(jù)
 1. 分布式數(shù)據(jù)庫
 2. 快照 觸發(fā)器

日期函數(shù):

日期函數(shù)2.PNG
select round(sysdate,'month'),round(sysdate,'year') from dual;

ROUND(SYSDATE, ROUND(SYSDATE,                                                   
-------------- --------------                                                   
01-12月-15     01-1月 -16        

轉(zhuǎn)換函數(shù):

數(shù)據(jù)類型轉(zhuǎn)換:
隱式
顯示

隱式數(shù)據(jù)類型轉(zhuǎn)換:(oracle自動完成)

隱式數(shù)據(jù)類型轉(zhuǎn)換.PNG
select * from emp where hiredate='17-11月-81';

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                 

顯示數(shù)據(jù)類型轉(zhuǎn)換:

顯式數(shù)據(jù)類型轉(zhuǎn)換.PNG

to_char函數(shù)對日期的轉(zhuǎn)換:

to_char(date,'format_model')
格式:
必須包含在單引號中而且大小寫敏感
可以包含任意的有效的日期格式
日期之間用逗號隔開

日期格式的元素:

日期格式的元素.PNG
--2015-11-22 15:32:12今天是星期日
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI                                              
----------------------------------                                              
2015-11-22 15:33:55今天是星期日 

to_char函數(shù)對數(shù)字的轉(zhuǎn)換:

to_char函數(shù)中經(jīng)常使用的幾種格式

格式.PNG
--查詢員工薪水:兩位小數(shù) 千位符 貨幣代碼
select to_char(sal,'L9,999.99') from emp;
TO_CHAR(SAL,'L9,999                                                             
-------------------                                                             
           ¥800.00                                                             
         ¥1,600.00                                                             
         ¥1,250.00                                                             
         ¥2,975.00                                                             
         ¥1,250.00                                                             
         ¥2,850.00                                                             
         ¥2,450.00                                                             
         ¥3,000.00                                                             
         ¥5,000.00                                                             
         ¥1,500.00                                                             
         ¥1,100.00                                                             

TO_CHAR(SAL,'L9,999                                                             
-------------------                                                             
           ¥950.00                                                             
         ¥3,000.00                                                             
         ¥1,300.00

通用函數(shù):
這些函數(shù)適用于任何數(shù)據(jù)類型锨络,同時也適用于空值

nvl(expr1,expr2)
nvl(expr1,expr2,expr3)
nullif(expr1,expr2)
coalesce(expr1,expr2,...,exprn)

--nvl2(a,b,c) 當(dāng)a=null的時候赌躺,返回c;否則返回b
select sal*12+nvl2(comm,comm,0) from emp;

--nullif(a,b) 當(dāng)a=b的時候羡儿,返回null礼患;否則返回a
select nullif('abc','abc') 值 from dual;

值                                                                              
---                                                                             
    
select nullif('abc','abcd') 值 from dual;

值                                                                              
---                                                                             
abc  

--coalesce 從左到右找到第一個不為null的值
select comm,sal,coalesce(comm,sal) "第一個不為null的值" from emp;

  COMM        SAL 第一個不為null的值                                        

              800                800                                        
   300       1600                300                                        
   500       1250                500                                        
             2975               2975                                        
  1400       1250               1400                                        
             2850               2850                                        
             2450               2450                                        
             3000               3000                                        
             5000               5000                                        
     0       1500                  0                                        
             1100               1100                                        

  COMM        SAL 第一個不為null的值                                        

              950                950                                        
             3000               3000                                        
             1300               1300 

條件表達式:

在sql語句中使用if-then-else邏輯
使用兩種方法:
1、case表達式:sql99的語法,類似basic讶泰,比較繁瑣
2咏瑟、decode函數(shù):Oracle自己的語法,類似java痪署,比較簡潔

語法:

case:

case expr when comparison_expr1 then return_expr1
         [when comparison_expr2 then return_expr2
          when comparison_exprn then return_exprn
          else else_expr]
end

SQL> select ename,job,sal 漲前,
  2         case job when 'PRESIDENT' then sal+1000
  3                  when 'MANAGER' then sal+800
  4                  else sal+400
  5          end 漲后
  6  from emp;

或者:
case when sal<3000 then ****
     when sal>=3000 and sal<6000 then ****
     else ****
end

decode:

decode(col|expression,search1,result1
                      [,search2,result2,...,]
                      [,default])

SQL> select ename,job,sal 漲前,
  2         decode(job,'PRESIDENT',sal+1000,
  3                    'MANAGER',sal+800,
  4                              sal+400) 漲后
  5  from emp;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末码泞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狼犯,更是在濱河造成了極大的恐慌余寥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悯森,死亡現(xiàn)場離奇詭異宋舷,居然都是意外死亡,警方通過查閱死者的電腦和手機瓢姻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門祝蝠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幻碱,你說我怎么就攤上這事绎狭。” “怎么了褥傍?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵儡嘶,是天一觀的道長。 經(jīng)常有香客問我恍风,道長蹦狂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任朋贬,我火速辦了婚禮凯楔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锦募。我一直安慰自己摆屯,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布御滩。 她就那樣靜靜地躺著,像睡著了一般党远。 火紅的嫁衣襯著肌膚如雪削解。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天沟娱,我揣著相機與錄音氛驮,去河邊找鬼。 笑死济似,一個胖子當(dāng)著我的面吹牛矫废,可吹牛的內(nèi)容都是我干的盏缤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蓖扑,長吁一口氣:“原來是場噩夢啊……” “哼唉铜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起律杠,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤潭流,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柜去,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灰嫉,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年嗓奢,在試婚紗的時候發(fā)現(xiàn)自己被綠了讼撒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡股耽,死狀恐怖根盒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豺谈,我是刑警寧澤郑象,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站茬末,受9級特大地震影響厂榛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丽惭,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一击奶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧责掏,春花似錦柜砾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞳浦,卻和暖如春担映,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叫潦。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工蝇完, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓短蜕,卻偏偏與公主長得像氢架,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朋魔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.簡介 數(shù)據(jù)存儲有哪些方式岖研?電子表格,紙質(zhì)文件铺厨,數(shù)據(jù)庫缎玫。 那么究竟什么是關(guān)系型數(shù)據(jù)庫? 目前對數(shù)據(jù)庫的分類主要是...
    喬震閱讀 1,715評論 0 2
  • 查詢 字符串函數(shù) UPPER LOWER INITCAP LENGTH SUBSTR(Oracle默認從1開始而不...
    嘉美伯爵閱讀 836評論 0 1
  • SQL ==SQLPLUS== DML(Data Manipulation Language,數(shù)據(jù)操作語言)---...
    蝌蚪1573閱讀 590評論 0 4
  • ORACLE日期時間函數(shù)大全 TO_DATE格式(以時間:2007-11-02 13:45:25為例) Year:...
    雨一流閱讀 674評論 0 2
  • 七年前的那個清晨 她的拳頭捶打著我的背 同時也捶打著我的心 早飯后 她提著一大框垃圾 遠離了我的視線 迅速又跑了回...
    走小路的人_6ff4閱讀 160評論 0 0