Oracle从零开始04——SQL语句03——单行函数
?
5.單行函數
function_name(column|expression,[arg1,arg2,…])
參數說明:function_name:函數名稱
column:數據庫列名
expression:字符串或計算表達式
arg1,arg2:在函數中使用參數
?
1)字符函數
接受字符輸入并返回字符或數值
?
a)小寫變大寫UPPER()
如:SELECT UPPER('smith') FROM dual;
如用戶查找時不會考慮姓名是大寫還是小寫,所以在查詢語句中為了方便就可以使用upper函數:
SELECT* FROM emp WHERE ename = UPPER('Smith') ;
?
b)大寫變小寫LOWER()
如:SELECT LOWER ('HELLO WORLD') FROM dual;
?
c)首字母大寫INITCAP()
如:SELECT INITCAP ('HELLO WORLD') FROM dual;
如將雇員表中的雇員姓名變為首字母大寫:
SELECT INITCAP (ename) FROM emp;
?
d)字符串連接CONCAT()
但是此種方式不如||好用
如:SELECT CONCAT ('hello','world') FROM dual;
?
e)字符串截取SUBSTR()
?
f)字符串長度LENGTH()
?
g)字符串替換REPLACE()
如:SELECT SUBSTR('hello',1,3) 截取字符串,
LENGTH('hello') 字符串長度,
REPLACE('hello', 'l', 'x') 字符串替換
????FROM dual;
截取點從0和1都是一樣的
如已顯示所有雇員的姓名及姓名的后三個字符(因為雇員姓名的字符喜歡長度不一樣,只能求出整個的長度再減去2,進行截取):
SELECT ename, SUBSTR(ename,LENGTH(ename)-2) FROM emp;
SUBSTR可以倒著截取,只要輸入的位置是負數就表示倒著進行
SELECT ename, SUBSTR(ename,-3,3) FROM emp;
?
?
2)數值函數
接受數值輸入并返回數值
?
a)四舍五入ROUND()
如執行四舍五入操作:
如保留兩位小數:
如保留整數位:
?
b)截斷小數位TRUNC()
與ROUND()不同,在TRUNC()中不會保留任何的小數,而且也不會進位
如驗證TRUNC函數:
通過該函數也可以指定小數點的保留位數:
也可以使用負數表示位數:
取余(取模)MOD()
?
3)日期函數
對日期型數據進行操作
日期±數字=日期
日期-日期=數字(天數)
如:顯示10部門雇員進入公司的星期數
首先要知道前日期:
求出星期數:當前日期-雇用日期=天數 天數/7=星期數:
SELECT empno,ename,ROUND((SYSDATE-hiredate)/7) FROM emp;
?
a)MONTHS_BETWEEN()給定日期范圍的月數
?
b)ADD_MONTHS()指定日期上加上指定約束,求出之后的日期
?
c)NEXT_DAY()下一個的指定日期
?
d)LAST_DAY ()求出給定日期的最后一天日期
?
4)轉換函數
從一種數據類型轉換為另一種數據類型
?
a)TO_CHAR():轉換成字符串
拆分年月日:如要將雇用日期的年月日進行分開,就可以使用這個函數進行拆分。但是首先必須指定拆分的通配符:
SELECT empno,ename,
TO_CHAR(hiredate,'yyyy') year,
TO_CHAR(hiredate,'mm') months,
TO_CHAR(hiredate,'dd') day
FROM emp;
日期格式轉換:
Oracle中默認的日期格式:19-4月 -87
中國的格式:1987-04-19
SELECT empno,ename,TO_CHAR(hiredate,'yyyy-mm-dd') FROM emp;
去掉前導0:如果是5月會用05表示,如果不希望出現的話,可以使用fm去掉
SELECT empno,ename,TO_CHAR(hiredate,'fmyyyy-mm-dd') FROM emp;
分割數字:在數字中加入一些符號以分割太長的數字,一般使用","
9:表示一位數字
SELECT empno,ename,TO_CHAR(sal,'99,999') FROM emp;
金額顯示 方式:
$:表示美元
L:Local的縮寫,以本地的語言顯示金額
SELECT empno,ename,TO_CHAR(sal,'$99,999') FROM emp;
SELECT empno,ename,TO_CHAR(sal,'L99,999') FROM emp;
?
?
b)TO_NUMBER():轉換成數字
SELECT TO_NUMBER('123')+TO_NUMBER('123') FROM dual;
?
c)TO_DATE():轉換成日期
SELECT TO_DATE('2009-02-16','yyyy-mm-dd') FROM dual;
?
5)通用函數
?
a)NVL函數
如計算年薪
SELECT empno,ename,(sal+comm)*12 FROM emp;
造成這樣的結果是有些雇員的獎金是NULL,NULL計算之后還是NULL,此時就可以使用NVL函數,將一個指定的null值變成指定的內容
SELECT empno,ename,NVL(comm,0),(sal+NVL(comm,0))*12 income FROM emp;
?
b)DECODE函數
類似于IF…ELSE語句
DECODE(col/expression,search1,result1[,search2,result2,…][,default])
說明:col/expression:列名或者表達式
search1、search2…searchi:用于比較的條件
result1、result2…resulti:返回值
如果col/expression和searchi相比較,結果相同的話則返回resulti,如果沒有與col/expression相匹配的結果,則返回默認值default
SELECT DECODE(1,1,'內容是1',2,'內容是2',3,'內容是3') FROM dual;
?
轉載于:https://blog.51cto.com/858315/1124949
總結
以上是生活随笔為你收集整理的Oracle从零开始04——SQL语句03——单行函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重力感应的测试程序andriod源代码
- 下一篇: iphone开发之轻松搞定原生socke