所以今天我們一起來看看單行函數在oracle中有哪些是比較常見常用的。
一、數字類型進行數字絕對值的求值:abs()
例如,查看emp表裡面,有設置獎金的員工裡面,獎金和工資之間的絕對值差距是多少?
對數字進行四舍五入:round(n, 保留的小數精度)
對數字進行截取:trunc(n, 保留的小數精度)
進行數字的向上取整:ceil() 找比自己大的最近的這個整數
進行數字的向下取整:floor() 找比自己小的最近的這個整數
進行數字的幂運算:power(n, 次方) 數字的多少次方
進行數字的取餘數運算:mod(被除數, 除數) 除法運算的餘數,經常用來判斷倍數關系
二、字符串類型
進行字符串的截取:substr()
1. substr(s, 開始序号, 連續長度)
查詢首字母是A開頭的員工名字
查詢倒數第二個字母是E的員工名字
2. substr(s, 開始序号) 沒有連續的長度,默認就是從開始一直取到最後一個
查詢名字的最後三個字母是 NES 的員工名字
字符串的拼接:concat(s1, s2) concat()函數隻能拼接兩個内容
如果要在兩個内容中間,需要加上符号,用三個内容拼接起來一個字符串,那麼就需要使用concat()函數的嵌套了。
在oracle裡面,拼接一般使用 || 進行。
查詢字符串的長度:length()
查詢名字的長度剛好是5個字母的員工信息
将字符串轉換成小寫:lower()
将字符串轉換成大寫:upper()
将字符串轉換成首字母大寫其他字母小寫:initcap()
使用上面學過的函數,嵌套一個新的功能出來,查詢員工的名字,最後一個字母大寫,其他字母小寫。
在一個大的字符串裡面,查找是否有包含另一個字符或者字符串,返回找到的字符在大的字符串中的位置:instr()
1. instr(s, '查找的内容')
隻會返回遇到的第一個匹配值,如果沒有匹配,就返回0。
2. instr(s, '查找的内容', 從第幾個序号開始查找, 找第幾個匹配的内容)
3. 我們放到一個筆試題裡面看看 instr() 函數的使用:
下面的表格,每一行都由省-市-區組成,現在我們需要取出每行中間城市的名稱。
create table addrs(
addr varchar2(50)
);
insert into addrs values('廣東省-深圳市-羅湖區');
insert into addrs values('新疆維吾爾自治區-伊犁市-烏魯木齊');
insert into addrs values('湖南省-長沙市-天心區');
commit;
我們使用instr()查找第一個和第二個分隔符的位置,再使用substr()進行截取就好了。
字符串的替換方法:replace(s, '舊字符', '新字符')
取出名字裡面所有的A
删除某個指定範圍的數據:translate(s, '要被替換的很多個舊字符' , ' ')
例如下面這個題目,我們有很多個用戶名username,我們需要找出包含了數字的有哪些。
create table user_inf2(
userid number,
username varchar2(50)
);
insert into user_inf2 values(1,'ieiuefjdkk');
insert into user_inf2 values(2,'ifjsk13234');
insert into user_inf2 values(3,'5634kjdfkl12');
insert into user_inf2 values(4,'9883475');
insert into user_inf2 values(5,'872176lkgkj');
我們将數字都去掉,然後查看和原字符串不相同的數據即可。
正則表達式的數據替換方法:regexp_replace(s, '正則表達式', '新的内容')
這個用正則的替換方法同樣可以實現。
舉一個正則表達式的例子:
我們要删除下面這個表格中,所有城市名字前面的數字序号。
create table user_inf3(
userid number,
addr varchar2(100)
);
insert into user_inf3 values(1,'1:深圳,2:廣州');
insert into user_inf3 values(2,'1:北京,2:上海,3:杭州');
insert into user_inf3 values(3,'1:武漢,2:武漢2');
數字範圍[0-9]也可以使用 \d 進行替換。
三、時間日期類型
獲取當前的時間日期:sysdate current_date
獲取查看日期所在的月份的最後一天:last_day()
查看日期之間的月份間隔:months_between()
月份的偏移查詢:add_months() 在這個日期的基礎上,往前或者往後移動N個月
日期天數的間隔計算,直接用 減法 :
進行日期天數的偏移查詢:
日期 數字截取的函數 trunc() ,實現日期的截斷:
日期截取的維度:
yyyy 年
mm 月
dd 天
hh24 小時
mi 分鐘
day 周
一個實際的練習:
顯示一個永遠是明天早上十點的時間:
四、數據類型轉換
将一個純數字組成的字符串轉換成數字類型:to_number()
将一個數字類型或者日期類型轉換成字符串類型:to_char()
将時間日期格式的字符串 轉換成日期類型:to_date()
時間提取的維度有:
yyyy 年
mm 月
dd 日
hh24 時
mi 分
ss 秒
day 周
練習:
查詢emp表中,每一年分别有多少員工入職?
查詢emp表中,每個員工入職了多少年零多少月?
,