SQL工作常用函式 Oracle PLSQL

2021-08-31 01:42:27 字數 4152 閱讀 3432

--整體**示例

select

*from

(select airline,

substr(

date,1

,4) 年,

case

when

date

between

'2018-01-01'

and'2018-08-31'

then

date

else to_char(to_date(

date

,'yyyy-mm-dd')+

364,

'yyyy-mm-dd'

)end 日期,

decode(新航班號,

null

,flight_no,新航班號) 航班號,

sum(ticket_income_cki + account_fuel)

/nullif

(sum

(order_seat * standard_price),0

) 折扣,

sum(order_seat * segment_space)

/nullif

(sum

(supply_seat * segment_space),0

) 客座,

from database0 t

where

(dep_date between

'2018-01-01'

and'2018-08-31'

or dep_date between

'2017-01-01'

and'2017-08-31'

)and length(trim(translate(flight_no,

'0123456789'

,' '))

)isnull

group

by airline,

substr(flight_date,1,

4),case

when

date

between

'2018-01-01'

and'2018-08-31'

then

date

else to_char(to_date(

date

,'yyyy-mm-dd')+

364,

'yyyy-mm-dd'

)end

,--注意這裡沒有'日期'

decode(新航班號,

null

,flight_no,新航班號)

)pivot

(sum

(折扣) 折扣,

sum(客座) 客座 for 年 in

('2017'

,'2018'

))

substr(variable, start_num, num_chars)

substr相當於excel裡的mid函式,substr的語句必須要在group by中分組(有使用到聚集函式如sum時)

substr(

date,1

,4) 年 --獲取年份,date格式為20181105

substr(flight_no,-1

)--相當於excel的right函式,擷取最右邊的n個字元

decode(variable, value_a, 『a』, value_b, 『b』, 『other』)

重編碼函式,當variable=a時,改為b(功能較弱,只能用於判斷等於某值時修改,如要對於在某個範圍時重編碼,使用case when),decode的語句必須要在group by中分組

decode(sale,

1000

,'d'

,2000

,'c'

,3000

,'b'

,4000

,'a'

,』other』)

--將不同的**重編碼為不同等級,其他改為'other'

decode(

value

,1000

,'d'

,2000

,'c'

,3000

,'b'

,4000

,'a'

,value

)--只修改幾個值,其他保留為value本身不修改

case…when…end

case when 語句一般用於重新編碼生成新變數,case when的語句必須要在group by中分組

case

when

date

between

'2018-01-01'

and'2018-08-31'

then

'今年'

when

date

between

'2017-01-01'

and'2017-08-31'

then

'去年'

else

'前年'

end 年份 --將日期重編碼生成年份變數

case

when

date

between

'2018-01-01'

and'2018-08-31'

then

date

else to_char(to_date(

date

,'yyyy-mm-dd')+

364,

'yyyy-mm-dd'

)end 日期

--將去年的日期按星期對應改為今年的日期,今年的日期保持不變

length/trim/translate

length/trim/translate都是處理字串的函式

length() --計算長度

trim() --剔除空格

translate --將某字元翻譯為某字元

length(trim(translate(flight_no,

'0123456789'

,' '))

)isnull

--flight_no欄位有的含有字母,有的為純數字,此語句將含有字母的行剔除

nullif(expression1,expression2)

nullif用於判斷expression1和expression2是否相等,相等時返回expression,否則返回null

sum

(order_seat * segment_space)

/nullif

(sum

(supply_seat * segment_space),0

) 客座

--判斷除數是否為0,為0時替換為null,避免報錯

to_char(to_date())

日期和字串格式的轉換

to_char(to_date(

date

,'yyyy-mm-dd')+

364,

'yyyy-mm-dd'

)--此處的date原欄位型別為vachar2,先用to_date函式轉為日期格式,即可用+364來調整日期,再用to_char函式轉回字串型別,保持字段型別不變

pivot

pivot 為行轉列函式

select

*from(.

..)pivot

(sum

(折扣) 折扣,

sum(客座) 客座 for 年 in

('2017'

,'2018'))

--將變數年轉置為列,原來的列將會由'客座','折扣'變為'2017_客座','2017_折扣','2018_客座','2018_折扣'.

--所有用到聚集函式的變數都要寫到pivot函式裡,可重新命名變數

Oracle常用SQL時間函式

1 查詢當前日期和時間 select sysdate from dual 2 查詢本月最後一天 select last day sysdate from dual 3 查詢前後多少月 select add months sysdate,24 from dual select next day sys...

oracle常用sql及函式總結

一.dao層入庫到資料庫系統和當前時間不一致的問題 to char sysdate,yyyy mm dd hh24 mi ss 總結 yyyy 表示 年份,mm 表示 月份,dd 表示 天,hh24 表示 小時,mi 表示 分鐘 ss 表示 秒,to char sysdate,yyyy mm dd ...

常用函式SQL與Oracle的區別

1 sql isnull topdays,0 as topdays oracle nvl topdays,0 as topdays sql語法 isnull check expression,replacement value sql引數 check expression,replacement v...