程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle單行函數

oracle單行函數

編輯:Oracle教程

oracle單行函數


單行函數的語法

Function_name(column|expression, [arg1, arg2, ...])

參數說明:

Function_name 函數名稱

column 列名

expression 表達式

arg1,arg2,... 參數

單行函數分類:

字符函數:接收字符輸入並返回字符或數值

數值函數:接受數據輸入並返回數值

日期函數:對日期型數據進行操作

轉換函數:從一種數據類型轉換為另外一種數據類型

通用函數:NVL 函數 DECODE 函數

字符函數

-- lower() 將字符串轉化為小寫
select ename from emp where lower(ename) like '%a%';
select ename from emp where ename like '%a%'or ename like '%A%'; 

-- upper() 將字符串轉化為大寫
select ename from emp where upper(ename) like '%A%';

-- initcap() 將單詞的首字母轉為大寫,其余字母轉為小寫
select initcap('HELLO WORLD') from dual;
select initcap(ename) from emp;

-- concat() 將字符串相連
select concat('hello', 'world') from dual;
select 'hello'||'world' from dual;

-- substr() 字符串截取
select ename, substr(ename, 1, 2), substr(ename, -3, 3) from emp;

-- length() 計算長度
select length('abcdef'), length('12345678') from dual;

-- replace() 字符串替換
select substr('hello', 3, 2) 取子串, length('hello') 長度, replace('hello', 'l', 'x') from dual;

-- chr() 將數字轉為其對應的ascii碼字符
select chr(65), chr(66) from dual;

-- ascii() 將對應的字符轉為其ascii碼對應的數字
select ascii('A'), ascii('B') from dual;

數值函數

-- round() 四捨五入,默認精確到個位,指定精確到小數點後幾位
select round(23.652) from dual; 
select round(23.652, 1) from dual;
select round(23.652, -1) from dual;

-- trunc() 截斷小數位數,按指定的精度截斷小數或整數(不進行四捨五入運算)
select trunc(25.46, 1) from dual;
select round(25.46, 1) from dual;

select trunc(25.46, -1) from dual;
select round(25.46, -1) from dual;

-- mod() 對一個數取余數
select mod(10, 3) from dual;

日期函數

Oracle中提供了很多與日期操作相關的函數,主要包括加減。

對日期進行加減運算的時候要遵循一些規則

日期-數字=日期

日期+數字=日期

日期-日期=數字 表示兩個日期之間相隔的天數

-- 顯示10部門雇員進入公司的星期數
select empno, ename, deptno, round((sysdate - hiredate)/7) from emp where deptno = 10;

-- Months_between() 返回兩個給定日期之間的相隔的月數
-- 查詢10部門的雇員工作的月數
select deptno, empno, ename, months_between(sysdate, hiredate) from emp where deptno = 10;
select deptno, empno, ename, round(months_between(sysdate, hiredate)) from emp where deptno = 10;

-- add_months() 返回給定的日期加上指定的月數後的日期
select empno, ename, hiredate, add_months(hiredate, 5), add_months(hiredate, -1) from emp;

-- next_day() 指定日期下一個指定的星期幾是哪一天
select sysdate, next_day(sysdate, '星期一') from dual;

-- last_day() 求出給定日期所在月的最後一個日期
select last_day(sysdate) from dual;
select last_day(to_date('2015-02-13', 'yyyy-mm-dd')) from dual;

轉換函數

to_char()在使用的時候要用到格式控制的符,格式控制符不區分大小寫字母

年:Y,年份為四位數,故應寫成:YYYY或yyyy

月:M,月份為兩位數,故應寫成:MM或mm

日:D,日為兩位數,故應寫成:DD或dd

-- to_char() 將數字或日期轉化為字符串
-- 對系統的日期格式顯示方式進行轉換,使其按中國日期習慣顯示,即”YYYY-MM-DD”
select empno, ename, to_char(hiredate, 'yyyy-mm-dd') from emp;

-- fm 去掉個位數的日、月前面的0
select empno, ename, to_char(hiredate, 'fmyyyy-mm-dd') from emp;

-- 對入職日期按照年、月、日進行拆分
select empno,ename,to_char(hiredate,'yyyy') year,
       to_char(hiredate,'mm') month,
       to_char(hiredate,'dd') day
from emp
select empno,ename,
       to_char(hiredate,'yyyy')||'年'||to_char(hiredate,'mm')||'月'||to_char(hiredate,'dd')||'日'
from emp

-- to_char() 對數字進行格式化
select empno,ename,to_char(sal,'999,999,999') from emp;
select empno,ename,to_char(sal,'000,000,000') from emp;
select empno,ename,to_char(sal,'$99,999') from emp;

-- to_number() 將當前的固定格式的字符串轉換為數字
select sal from emp where sal>to_number('$1,250.00','$9,999.99');
select to_number('300') + to_number('400') from dual;

-- to_date() 將當前固定格式的字符串轉化為日期
-- 查詢1981-1-1 以後入職的員工
select ename, hiredate from emp
where hiredate >= to_date('1981-1-1', 'yyyy-mm-dd');
select ename, hiredate from emp
where hiredate >= date '1981-1-1';

通用函數

decode(),此函數有類似於If...elseif...else 語句,用於對多分支的判斷

語法: decode(col/expression,search1,result1[,search2,result2,……][,default])

說明:

Col/expression:為列名或表達式

Search1,search2……searchI:為多種可能出現的條件

Result1,result2……resulti:當滿足對應的shearch後為返回值

-- nvl() 對為空值的字段進行處理
-- 求每個雇員的年薪(包括獎金)
select empno, ename, (sal+comm)*12 from emp;
select empno,ename,sal,nvl(comm,0) new_comm,(sal+nvl(comm,0))*12 incom from emp;

-- docode() 分支判斷
select decode(2,1,'內容1',2,'內容2',3,'內容3') from dual;
select  empno 雇員編號,ename 雇員姓名,
   decode(job,'CLERK','業務員','SALESMAN','銷售人員',
              'MANAGER','經理','ANALYST','分析師','PRESIDENT','總裁') 工作
from emp

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved