03_單行函數 oracle學習筆記
select ...
from ...
where ....
order by ....
多行函數
SQL> select count(*) from emp;
COUNT(*)
----------
14
字符函數
1 select Lower('Hello') 轉小寫, upper('hello') 轉大寫, initcap('hello woRld') 首字母大寫
2* from dual
SQL> /
轉小 轉大 首字母大寫
----- ----- -----------
hello HELLO Hello World
select concat('hello', 'world') from dual
SQL> select concat (concat('hello', 'world'), 'cccc') 函數嵌套 from dual;
函數嵌套
--------------
helloworldcccc
CONCAT('HE
----------
helloworld
SUBSTR(a,b) --- 從a中第b位 去字符串
substr(a, b, c) 從a中第b位, c個字符....
SQL> select substr('abcdefg1111', 2) 從第二位取子串, substr('abcdefg1111', 2, 4) 取4個字符 from dual;
從第二位取 取4
---------- ----
bcdefg1111 bcde
--length字符數 --lengthb字節數
--一箇中文字符,兩個字節
SQL> select length('中國abc') 字符數, lengthb('中國abc') 字節數 from dual;
字符數 字節數
---------- ----------
5
SQL> \
SQL> select instr('abcdefg', 'efg') 求子串位置 from dual;
求子串位置
----------
5
SQL> select lpad('abcd', 10, '*') lpad, rpad('abcd', 10, '*') rpad from dual;
LPAD RPAD
---------- ----------
******abcd abcd******
--trim 去掉前後指定的字符,字符可以是空格,也可以不是空格 .
SQL> select trim('A' from 'ABCDEFg') from dual;
TRIM('
------
BCDEFg
========數字函數
//2 > 0 表 保留小數點2位
// 0 保留個位
//-1 保留10位
//-1 保留百位 (要看十位 四捨五入)
1 select round(45.926, 2) AA, round(45.926, 1) BB, round(45.926, 0) CC, round(45.926) DD,
2* round(45.926, -1) EE, round(45.926, -2) FF from dual
3 /
AA BB CC DD EE FF
---------- ---------- ---------- ---------- ---------- ----------
45.93 45.9 46 46 50 0
=========日期
時間的計算.......
oracle數據庫中 date包含 日期和時間
mysql 3中數據類型 date time times.....
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual ;
SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual ;
TO_CHAR(SYSDATE,'YY
-------------------
2014-10-07 16:34:17
----昨天今天明天
select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;
select to_char(sysdate-1, 'yyyy-mm-dd hh24:mi:ss') 昨天, sysdate 今天, sysdate+1 明天 from dual;
----查詢員工的入職時間,按照 周 月 年 方式顯示.....
select (sysdate-hiredate)/7 周, (sysdate-hiredate)/30 月, (sysdate-hiredate)/365 年
from emp;
1 select (sysdate-hiredate)/7 周, (sysdate-hiredate)/30 月, (sysdate-hiredate)/365
2* from emp
SQL> /
周 月 年
---------- ---------- ----------
1763.95625 411.589791 33.8292979
1754.67053 409.423125 33.6512157
1754.38482 409.356458 33.6457363
1748.81339 408.056458 33.538887
1723.24196 402.089791 33.048476
1744.67053 407.089791 33.4594349
1739.09911 405.789791 33.3525856
1433.38482 334.456458 27.4895719
1716.09911 400.423125 32.9114897
1726.09911 402.756458 33.1032705
1428.52768 333.323125 27.3964212
1713.81339 399.889791 32.8676541
1713.81339 399.889791 32.8676541
1706.52768 398.189791 32.7279281
---查詢員工的入職時間, 入職月數 ....
select ename, (sysdate-hiredate)/30 估計月, MONTHS_BETWEEN(sysdate, hiredate) 函數計算月
from emp
1 select ename, (sysdate-hiredate)/30 估計月, MONTHS_BETWEEN(sysdate, hiredate) 函數計算月
2* from emp
SQL> /
ENAME 估計月 函數計算月
---------- ---------- ----------
SMITH 411.589872 405.699876
ALLEN 409.423205 403.603102
WARD 409.356539 403.538586
JONES 408.056539 402.183747
MARTIN 402.089872 396.345037
BLAKE 407.089872 401.216005
CLARK 405.789872 399.957941
SCOTT 334.456539 329.63536
KING 400.423205 394.699876
TURNER 402.756539 396.990199
ADAMS 333.323205 328.506328
JAMES 399.889872 394.151489
FORD 399.889872 394.151489
MILLER 398.189872 392.506328
已選擇14行。
select next_day(sysdate, '星期六') from dual
SQL> select next_day(sysdate, '星期六') from dual ;
NEXT_DAY(SYSDA
--------------
11-10月-14
==========================數據類型轉換==============
select *
2 from emp
3* where hiredate > '01-1月 -81'
日期相關類型轉換
---比這個日期都要大的08-9月 -81 所有員工信息 按照三種方式實現
select * from emp
where hiredate > '01-1月 -81' --隱式類型轉換
select * from emp
where hiredate > to_date('1981-01-01 02:03:04', 'yyyy-mm-dd hh24:mi:ss') --字符串轉成日期...顯示類型轉換
select * from emp
where to_char(hiredate, 'yyyy-mm-dd hh24:mi:ss') > '1981-01-01 02:03:04'
1 select * from emp
2* where hiredate > to_date('1981-01-01 02:03:04', 'yyyy-mm-dd hh24:mi:ss')
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10
====================
數字和字符串轉換
--查詢員工的薪水:兩位小數 本地貨幣代碼 千位符
Y1,250.00
select empno, ename, to_char(sal, 'L9,999.99')
from emp;
1 select empno, ename, to_char(sal, 'L9,999.99')
2* from emp
SQL> /
EMPNO ENAME TO_CHAR(SAL,'L9,999
---------- ---------- -------------------
7369 SMITH ¥800.00
7499 ALLEN ¥1,600.00
7521 WARD ¥1,250.00
7566 JONES ¥2,975.00
7654 MARTIN ¥1,250.00
7698 BLAKE ¥2,850.00
7782 CLARK ¥2,450.00
7788 SCOTT ¥3,000.00
7839 KING ¥5,000.00
7844 TURNER ¥1,500.00
7876 ADAMS ¥1,100.00
7900 JAMES ¥950.00
7902 FORD ¥3,000.00
7934 MILLER ¥1,300.00
已選擇14行。
把這個字符¥1,250.00,轉成數字.....
select to_number('¥1,250.00', 'L9,999.99') from dual ;
SQL> select to_number('¥1,250.00', 'L9,999.99') from dual ;
TO_NUMBER('¥1,250.00','L9,999.99')
-----------------------------------
1250
通用函數
=======條件表達式 做報表
-給員工漲工資:總裁 1000 經理:800 其他漲500,
前後工資給列出來
PRESIDENT
MANAGER
if (job == 'PRESIDENT')
SAL+1000
else if (job == 'MANAGER')
SAL+800
else
SAL+500
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
CASE job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal + 500
END
select ename, job, sal 漲前工資,
(
CASE job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal + 500
END
)
漲後工資
from emp
ENAME JOB 漲前工資 漲後工資
---------- --------- ---------- ----------
SMITH CLERK 800 1300
ALLEN SALESMAN 1600 2100
WARD SALESMAN 1250 1750
JONES MANAGER 2975 3775
MARTIN SALESMAN 1250 1750
BLAKE MANAGER 2850 3650
CLARK MANAGER 2450 3250
SCOTT ANALYST 3000 3500
KING PRESIDENT 5000 6000
TURNER SALESMAN 1500 2000
ADAMS CLERK 1100 1600
JAMES CLERK 950 1450
FORD ANALYST 3000 3500
MILLER CLERK 1300 1800
已選擇14行。
第二種方法
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
decode(job, 'PRESIDENT', sal+10000, 'MANAGER', sal+800, sal+500)
select ename, job, sal 漲前工資,
(
decode(job, 'PRESIDENT', sal+10000, 'MANAGER', sal+800, sal+500)
)
漲後工資
from emp
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.