【Oracle 基礎】Oracle單行函數

文章目錄

一、字符函數

1)大小寫控制函數

1.upper(char):字符串轉換成大寫

2.lower(char):字符串轉換成小寫

3.initcap(chat):字符串每個單詞的首字母大寫

--大小寫控制函數
--upper
select * from emp where job = upper('salesman');

--lower
select * from emp where lower(job) = 'clerk';

--initcap
select empno, initcap(ename) from emp;

--upper、lower、initcap這三個函數的共同點,如果輸入參數值爲null時,則返回null
select empno, initcap(null) from emp;

2)字符控制函數

1.concat(str1,str2):連接兩個字符串

  • 只能連接兩個字符串,多個字符串需要嵌套使用
  • 連接符||
select ename||':'|| sal from emp
select concat(CONCAT(ename,':'),sal) from emp

2.substr(char,m[,n]):將char從m位置截取n位

  • n省略則截取指定位置之後的所有字符串
  • m爲0則從首位開始截取,相當於m爲1
  • m爲負數則從尾部開始截取
select substr('hello',2,3) from dual --ell
select substr('hello',2) from dual --ello

select substr('hello',0,1) from dual --h
select substr('hello',1,1) from dual --h

select substr('hello',-3,2) from dual --ll

3.length(char):返回字符串長度

select * from emp where length(ename) = 6;

4.instr(char1,char2[,n[,m]]):子串char2在源字符串char1從n位置搜索第m次出現的位置

select instr('hello oracle','oracle') from dual;--7
select instr('hello oracle hello oracle', 'oracle', 1, 2) from dual;--20

5.lpad(char1,n,char2):將字符串char2在源字符串char1左邊填充,使得填充後的字符串總長度爲n

  • 當n<length(char1)時,該函數無法填充,而是將char1從頭截取到只剩3位
select lpad('hello',10,'#') from dual--#####hello
select lpad('hello',3,'#') from dual--hel

6.rpad(char1,n,char2):將字符串char2在源字符串char1右邊填充,使得填充後的字符串總長度爲n

  • 當n<length(char1)時,該函數無法填充,而是將char1從頭截取到只剩3位
select rpad('hello',10,'#') from dual--hello#####
select rpad('hello',3,'#') from dual--hel

7.trim(char):去除字符串前後空格

  • ltrim去除左端空格,rtrim去除右端空格
  • 中間空格不會去除
select trim(' hel lo  ') from dual--hel lo
select ltrim(' hel lo  ') from dual--hel lo__
select rtrim(' hel lo  ') from dual--_hel lo

8.replace(char,search_string[,replacemenr_string]):在char裏面找到要替換的search_string,替換成replacemenr_string

select replace('hello oracle','oracle','world') from dual;

二、數值函數

1.round(n,[,m]):將數字n四捨五入到小數點後m位

  • m省略或者爲0則四捨五入到個位
  • m爲負數則四捨五入到個位(0位)前第m位
select round(273.568) from dual--274
select round(273.568,0) from dual--274

select round(273.568,2) from dual--273.57
select round(273.568,-2) from dual--300

2.trunc(n,[,m]):截取數字n到m位

  • 參數規則同round,區別是trunc函數只舍不入
select trunc(273.568) from dual--273
select trunc(273.568,0) from dual--273

select trunc(273.568,2) from dual--273.56
select trunc(273.568,-2) from dual--200

3.mod(m,n):m除以n後的餘數

select mod(25,2) from dual--1

三、日期和時間函數

1.sysdate:用於返回當前日期時間

select sysdate-1,sysdate,sysdate+1 from dual

2.months_between(d1,d2):返回兩日期之間相差月數

select MONTHS_BETWEEN(sysdate,'02-10月-19') from dual

3.add_months(d,n):日期d在n月後對應的日期

select ADD_MONTHS(SYSDATE, 5*12) from dual

4.next_day(d,char):日期d的下一個周次char對應的日期

select NEXT_DAY(sysdate, '星期一') from dual

5.last_day(d):返回指定日期d所在月的最後一天

select last_DAY(sysdate) from dual

6.round(d[,fmt]):返回日期時間d的四捨五入結果

select round(sysdate,'year') from dual --2020-01-01 00:00:00

7.trunc(d[,fmt]):返回日期時間d的截斷結果

select trunc(sysdate,'year') from dual --2019-01-01 00:00:00

常用取時方法(初末、對日等):

--當前時間
select sysdate  from dual;--2020-03-17 15:50:36
select ADD_MONTHS(sysdate,-12)  from dual;--去年對日 2019-03-17 15:50:36
--月初月末
select trunc(sysdate,'MM') from dual;--2020-03-01 00:00:00
select trunc(sysdate,'month') from dual;--同上

select LAST_DAY(sysdate) from dual;--2020-03-31 15:57:24
--年初年末
select trunc(sysdate,'YY')  from dual;--2020-01-01 00:00:00
select trunc(sysdate,'year')  from dual;--同上
select trunc(sysdate,'YYYY')  from dual;--同上
select ADD_MONTHS(trunc(sysdate,'YY'),-12)  from dual;--去年年初2019-01-01 00:00:00


select ADD_MONTHS(trunc(sysdate,'YY'),12)-1  from dual;--2020-12-31 00:00:00
select trunc(sysdate,'YY')-1  from dual;--去年年末2019-12-31 00:00:00

--季初季末
select trunc(sysdate,'Q')  from dual;--2020-01-01 00:00:00
select ADD_MONTHS(trunc(sysdate,'Q'),3)-1  from dual;--2020-03-31 00:00:00
--日初
select trunc(sysdate,'DD')  from dual;--2020-03-17 00:00:00
--周初週末
select trunc(sysdate,'day')+1  from dual;--2020-03-16 00:00:00
select trunc(sysdate,'D')+1  from dual;--同上

select trunc(sysdate,'day')+7  from dual;--2020-03-22 00:00:00

-----混合應用
--周初週末的去年對日
select ADD_MONTHS(trunc(sysdate,'day')+1,-12)  from dual;
select ADD_MONTHS(trunc(sysdate,'day')+7,-12)  from dual;

四、轉換函數

隱式數據轉換:

源數據類型 目標數據類型
varchar2或char number
varchar2或char date
number varchar2
date varchar2

1.to_date(char[,fmt[,‘nlsparams’]]):將字符串轉換成日期

select MONTHS_BETWEEN(sysdate,to_date('1992-10-02','yyyy-mm-dd'))/12 from dual

2.to_char:將日期或數值轉換成字符

  • to_char(d[,fmt[,‘nlsparams’]]):將日期d按照指定日期顯示語言nlsparams轉換成fmt格式的數值
select to_char(sysdate,'yyyymmdd') from dual --20191130
  • to_char(n[,fmt]):將數值n轉換成fmt格式的數值
fmt元素 格式
9 顯示數字,忽略前面的0
0 顯示數字,如果位數不足,則用0補齊
. 指定位置顯示小數點
, 指定位置顯示逗號
$ 在數字前加美元符號
L 在數字前加本地貨幣符號
select to_char(3.1415927,'L0,000,000,000') from dual-- ¥0,000,000,003
select to_char(3.1415927,'0,000,000.000') from dual-- 0,000,003.142
select to_char(33.1415927,'9,999,999,999') from dual-- ___________$33
select to_char(33.1415927,'9999999999') from dual--____33.14159

3.to_number(n[,fmt]):將包含數值的字符串轉換成數值類型

select to_number('$200,000.00','$999999999.99') from dual--200000

五、通用函數

1.nvl(expr1,expr2):在expr1爲null時返回expr2,否則返回expr1

2.nvl2(expr1,expr2,expr3):如果expr1不爲null,就返回expr2,否則expr1爲null就返回expr3

3.nullif(expr1,expr2):如果expr1與expr2相等則返回null,否則返回expr1

4.coalesce(expr1[,expr2][,expr2]):返回參數列表中第一個不爲null的表達式結果

六、條件函數

1.case表達式

case 條件
	when 表達式1 then 返回值1
	when 表達式2 then 返回值2
	......
	else el表達式
end

或者
case when 條件表達愛是1 then 返回值1
	 when 條件表達式2 then 返回值2
	 ......
	 else el表達式
end

2.decode()

decode(列名|條件,查找值1,返回值1[查找值2,返回值2......
				 默認值]

七、嵌套函數

單行函數可以嵌套,嵌套函數的志向順序是由內到外

select NEXT_DAY(ADD_MONTHS(SYSDATE, 5*12), '星期日') from dual
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章