定義:只對一行進行變換天通,并產生結果
6種
一土砂、字符函數
第一類:lower 谜洽、upper阐虚、 initcap--大小寫控制函數
第二類:concat 实束、substr咸灿、length/lengthb、 instr悼瘾、lpad | rpad 亥宿、trim 砂沛、replace
1碍庵、select lower('Hello World')轉小寫,upper ('Hello World')轉大寫,initcap('hello world')首字母大寫 from dual;
2静浴、select substr(a,b) 從a這個字符串中第b位開始取马绝,取右邊所有的字符 from dual;
select substr(a,b,c)從a這個字符串中第b位開始取掷邦,取c位 from dual;
3、length--字符數 lengthb--字節(jié)數
對于英文來說:字符數=字節(jié)數
對中文還說:2字符數=字節(jié)數
4或杠、instr(a,b)--查找字符:在a中找b,返回值為b的位置
select instr('Hello World','ll')位置 from dual向抢;
5胚委、lpad 左填充 ? rpad 右填充 ---3個參數 例:abcd 變成10位
select lpad('abcd',10,'*')左,rpad('abcd',10,'*')右 from dual;---返回 ******abcd ? 和abcd******
6亩冬、trim --去掉前后指定的字符---區(qū)分大小寫
select ?trim ('H' from 'Hello WorldH') from dual; ? 返回ello World
7硅急、replace --替換
select replace ('Hello World','l','*') from dual; ?返回He**o Wor*d
8覆享、concat--連接兩個字符,多個字符需要嵌套或用'||'
select concat('Hello','World') from dual;
二:數字函數
1营袜、round:四舍五入 ?trunc:截斷(只舍去) ?mod:求余
e.g. select round(45.926,2),round (45.926,1),round(45.926,0),round(45.926,-1),round(49.926,-2) from dual;
結果 45.93 ?45.9 ?46 ?50 ?0
select trunc(45.926,2),trunc (45.926,1),trunc(45.926,0),trunc(45.926,-1),trunc(49.926,-2) from dual;
結果 45.92 ?45.9 ?45 ?40 ?0
-------round函數和trunc函數不僅僅是數值函數撒顿,也是日期函數
三、日期函數
---------日期函數? months_between? ? add_months? next_day? last_day round? trunc
mysql: date 年月日 datetime 年月日小時分鐘秒
select now();
oracle:date 年月日小時分鐘秒---默認格式dd-mon-year
select sysdate from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
日期的數學運算
1日期加或減一個數字都是日期荚板;數字的單位是天
2凤壁、兩個日期相減返回日期之間相差的天數
3、可以用數字除24來向日期中加上或減去小時
select sysdate,sysdate-1,sysdate+1 from dual;
2啸驯、計算員工工齡:天 星期 月 年
select? ename,hiredate,(sysdate-hiredate) 天客扎,(sysdate-hiredate)/7 星期祟峦,(sysdate-hiredate)/30 月罚斗,(sysdate-hiredate)/365 年 from dual;
select? ename,hiredate,(sysdate-hiredate)/30 月1,months_between(sysdate,hiredate)月2 from dual;----兩個日期相差的月數
select ?add_months(sysdate,78) from dual;------向指定日期中加若干月
select last_day(sysdate) from dual;------時間所在月份的最后一天
select next_day (sysdate,'星期二') from dual;----指定日期的下一個日期 ?它的應用:每個周一自動備份表的 數據 第一宅楞、分布式數據庫 ?第二距淫、快照(不是很明白)
oracle中,備份和恢復數據庫都是用RMAN(Recovery Manager)
(在rman target中登錄 ? 輸入 back database;---備份數據庫 ? 輸入 recovery ?database;---恢復數據庫)
3、不允許日期加日期壁晒,沒有意義
4携取、假設sysdate='25-jul-95'
round(sysdate,'month')------01-aug-95
round(sysdate,'year')-------01-jan-96
trunc(sysdate,'month')-----01-jul-95
trunc(sysdate,'month')-----01-jan-95
四:轉換函數---意思:在不同的數據類型之間完成數值的轉換,分為隱式轉換和顯式轉換
隱式轉換:由oracle自動完成 ?
1、源碼 varchar2 ?or ?char ?轉換成 number
2、源碼 varchar2? or? char? 轉換成 date
3、源碼number 轉換為 varchar2
4、源碼date ?轉換為 varchar2
前提:被轉換對象是可以轉換的
顯式數據類型轉換
to_number /to_char/to_date/
e.g.select ?to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day ') from dual;
-----查詢員工薪水:兩位小數 ?千位符 本地貨幣代碼
e.g. select to_char(sal,'L9,999.99') from dual;
數字對字符串轉換:to_char 、字符串對數字轉換:to_number、
字符串對日期轉換:to_date勉失、日期對字符串轉換:to_char?
五徒蟆、通用函數
這些函數適用于任何數據類型,同時也適用于空值
nvl(expr1,expr2)//////nvl2(expr1,expr2,expr3)----當a=null時返回c,否則返回b
nullif(expr1,expr2)---當a=b丈冬,返回空值疏唾,否則返回a
coalesce(expr1,expr2,...,exprn)---從左往右找到第一個不為null的值
varchar2是varchar的增強喉童,nvl2是nvl的增強?
六:條件表達式
1咽白、在Sql中使用if-then-else邏輯
2三妈、使用兩種方法:
case表達式:SQL99的語法对室,類似Basic,比較繁瑣
Decode函數:Oracle自己的語法檐迟,類似java,比較簡潔
select ename,job,salary漲前,case job when 'manage' then salary+800
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?when 'president' then salary+1000?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else salary+600 ?end 漲后 ?from ?emp;
select ename,job,salary漲前廓块,decode (job,'president',sal+1000,'manager',sal+800,sal+400) from emp;