oracle数据库常用的函数总结
oracle數據庫常用的函數總結
1.前言
在日常開發中,有些企業使用oracle數據庫作為項目的數據存儲容器,我就總結哈自己遇到的一些函數的用法。
2.總結的函數
2.1extract
extract:
oracle中extract()函數從oracle 9i中引入,用于從一個date或者interval類型中截取到特定的部分
用法:
2.2sign
sign:
sign函數是根據給的數為正數,就返回1,0返回0,負數返回-1,我感覺這個函數用的蠻多的。需要注意sign(這個括號里面只能是個字段),我測試了,在括號中寫個子查詢直接就報錯了
用法:
2.3decode
decode函數:就是給某個值取一個值,我感覺他非常好用,感覺很像java中的switch的用法,在字段存char類型數字表示不同漢字含義,通過這個函數,查出來,前端可以直接顯示,不需要再轉一道漢字,后端的導出也是一步到位,不需要再使用switch轉漢字,簡化代碼。
用法:
decode(條件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
2.4to_date和to_char
to_date和to_char:因為這兩個函數使用頻率太高,放一起解釋;to_date:是將oracle中時間樣式的字符串或時間類型數據格式化為時間類型的數據(yyyy-MM-dd,yyyy-MM等等不同的時間樣式),to_char是將當前值變成字符串類型,在時間處理方面,可以將時間類型的轉化為字符串匹配,比如數據庫存的時間類型,但后臺接收的是一個字符串,格式是yyyy-MM,那么可以轉字符串比,也可以轉時間比,但注意只比較年月,其他內容截取
案例:
對to_char 和 to_date函數的補充:
測試代碼:
按系統時間來舉例:
當to_date(時間類型的數據)時,會默認保留年月日
這里可以發現oracle中對M和m是區分不了的,才報了格式代碼出現了兩次,解決方案是將mm表示分鐘的改成mi表示分鐘
你會發現mm變成mi后還是報錯了,因為to_date(時間類型的數據)再給一個時間轉化格式,to_date函數不支持了,那如果我想指保留年月該咋辦?可以使用trunc函數,trunc函數專門解決這個的,我文章最后會補充這個函數
當上邊的to_date 改為to_char后,就可以將時間類型的數據按照‘yyyy-MM-dd hh:mm:ss’的時間格式樣式變成字符串類型了
當然,我們使用to_char可以將時間類型的保留年月日信息變成字符串,也可以保留年月信息變成字符串
那也可以to_date(符合時間格式的字符串,時間格式)將時間格式的字符串變成時間類型的數據
嘗試用to_char(時間格式的字符串,對應時間格式樣式)將字符串弄成字符串,直接報內容識別不了
嘗試to_date(時間格式的字符串)不寫對應時間格式樣式,直接解析失敗
to_char(時間類型數據)會按oracle中時間默認解析的時間格式樣式來解析,比如我這的,就是這個樣子
可以使用字符串類型的時間進行篩選
根據上述測試大概做個總結:
1.to_date():括號中可以是時間類型的數據,但不能再寫時間格式樣式,不然報錯解析不了
2.to_date()括號中可以是字符串,但該字符串必須是滿足時間格式的,并且要寫上對應的時間格式樣式,不然解析字符串失敗
3.to_char()括號中可以是時間類型的數據,可以寫時間格式樣式,也可以不寫,不寫時間格式樣式就會使用oracle中默認的時間格式樣式來轉化。
4.oracle中對大寫字母和小寫字母區分不了,在寫時間格式樣式涉及月和分的要注意,月M,分m,oracle是識別不了的,要區分一哈,oracle中規定分用mi表示,也就是月分 MM mi
5.可以使用to_char()處理后的字符串類型的時間進行時間的篩選,也可以使用to_date()處理后的時間類型的時間進行刷選
2.5to_number()
to_number()函數是oracle中常用的類型轉換函數之一,是將一些處理過的按一定格式編排過的字符串變回數值型的格式。我在展示long類型的id,需要使用這個,不然太長會按照科學計數法展示
1、to_number()函數可以將char或varchar2類型的string轉換為一個number類型的數值;
2、需要注意的是,被轉換的字符串必須符合數值類型格式,如果被轉換的字符串不符合數值型格式,Oracle將拋出錯誤提示;
3、to_number和to_char恰好是兩個相反的函數;
用法:
2.6add_months
add_months 函數主要是對日期函數進行操作,在數據查詢的過程中進行日期的按月增加,其形式為:
add_months(date,int);其中第一個參數為日期,第二個為按月增加的幅度,例如:
add_months (sysdate,2):就是當前日期的兩個月之后的時間。注意:沒有add_year,想要年的效果,在月的add_months(sysdate,12)12月就是一年,這樣效果和year一樣了
案例:
2.7last_day
last_day()返回包含了日期參數的月份的最后一天的日期
案例:
2.8 round
round函數是用于對數字進行截取操作,且會對截取的數字進行四舍五入運算
案例:
2.9concat
concat:拼接函數,使用場景:將多個字段合在一起,比如year字段和month字段合在一起成年月格式了
案例:
2.10 row_number() over(partition by b.pid order by p_time desc)
案例:
//實現需求是:對數據先按最新時間排序,然后我只要最新時間的pid的數據(就是數據中有一樣的pid,我們要去重,但要保留最新的這個pid的數據) select id,pid,p_time from(select b.id,b.pid,b.p_time,row_number() over(partition by pid order by p_time) rn from SP_PRODUCER_WELL a,SP_WELL_DAILY_STATS b where a.id=b.pid and a.DEL_FLAG=0 and b.DEL_FLAG=0order by b.P_TIME desc) bbwhere rn=13.結語:
目前我遇到的常用的函數就這些,后續還有,我會補充,最后希望這些函數能給你的業務思路帶來靈感,更易實現需求。
補充:
substr函數格式 (俗稱:字符截取函數):
這篇文檔寫的可以,可以參考:https://www.cnblogs.com/dshore123/p/7805050.html
trunc函數:
trunc函數:用法有兩種:TRUNC(NUMBER)表示截斷數字,TRUNC(date)表示截斷日期
截斷數字:TRUNC(n1,n2),n1表示被截斷的數字,n2表示要截斷到那一位。n2可以是負數,表示截斷小數點前。注意,TRUNC截斷不是四舍五入。
截斷日期:參數可以是dd,d,y,yy,mi,mm
基礎數據:
案例:
參考資料:
https://www.cnblogs.com/weihuang6620/p/6903961.html
https://www.jb51.net/article/168512.htm
總結
以上是生活随笔為你收集整理的oracle数据库常用的函数总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring security/Shir
- 下一篇: linux cmake编译源码,linu