oracle 中sql語句的幾個基本函式

2022-08-12 17:21:15 字數 3871 閱讀 4215

今天學習了 sql語句中幾個基本的函式,

1、sysdate ----查詢當前資料庫系統時間 

select sysdate from dual;------ 其中dual是oracle自帶的一張虛擬表,沒有任何意義,為了保證sql語句的完整性。

trunc(列|值|表示式,小數的有效位數)  直接擷取有效位數

如:--將值2784.342933精確到小數點後3位,不四捨五入

select trunc(2784.342933,3) from dual;

--將值2784.642933精確到整數,2784

select trunc(2784.342933,0) from dual;

--將值2784.342933精確到整數十位,2780

select trunc(2784.342933,-1) from dual;

--將值2784.342933精確到整數百位,2800

select round(2784.342933,-2) from dual;

如:--求5/2的餘數

select mod(5,2) from dual;

4.abs(列|值) 求絕對值

--求-2的絕對值

select abs(-2) from dual;

字串函式:

1.length(列|值|表示式);求長度

--獲取員工表中員工名字及其名字長度

select

first_name,length(first_name)

from

s_emp;

2.upper(列|值|表示式);全部轉大寫字母

lower(列|值|表示式);全部轉小寫字母

initcap(列|值|表示式);每個單詞首字母大寫

select upper('abc')from dual;==>abc

select lower('abc')from dual;==>abc

select initcap('hello world')from daul;==>hello world

例子:查詢ben的工資

select salary from s_emp where lower(first_name) = lower('ben');

3.lpad(列|值,寬度,填充字元);從左邊補不足寬度個填充字元

rpad(列|值,寬度,填充字元);從右邊補不足寬度個填充字元

select rpad('abc',10,'de')from dual;

------------------

abcdededed

select lpad('abc',10,'de')from dual;

----------------

dedededabc

4.ltrim(列|值,擷取字元);從左邊擷取字元

rtrim(列|值,擷取字元);從右邊擷取字元

select rtrim('abcdedede','de') from dual;

------------

abcselect rtrim('abcddedede','de') from dual;

--------------

abc --表示從右邊開始擷取de|d|e,直到不同於擷取字元的字元為止

5.replace(列|值,被置換的字元,置換的字元);置換指定字元

select replace('helloworld','owo','***')from dual;==》hell***rld

6.translate(引數一,引數二,引數三);轉換指定字元

引數一:要處理的內容,列|值

引數二:要檢索的內容

引數三:檢索後,與檢索內容一一對應替換的內容(如果無替換值,則全部去掉)

select

translate('he1l20l4o w65o75rl4d765!',

'abcdefghijklmnopqrstuvwxyz0123456789',

'abcdefghijklmnopqrstuvwxyz')

from dual;

7.instr(要查詢的字串,希望查詢的字串,從什麼位置開始,第幾次出現)查詢指定字串中所在的位置下標    引數三 正數表示從左往右,負數表示從右往左

select instr('go,go,come on!','go',1,2)from dual;

注意:資料庫字串下標從1開始計數。

8.substr(列|值,指定位置下標,保留幾位)

select substr('hello world!',3)from dual;表示:從指定下標處開始獲取字元。

select substr('hello world!',3,4)from daul;表示:從3號座標開始獲取,保留四個長度

9.decode()

a.類似乙個三目運算子:(表示式?a:b)如果表示式為true,取a;如果表示式為false,取b

比較第一和第二個引數,如果相等取第三個引數,如果不相等取第四個引數。

decode(a,b,c,d,e,f,g,h,i,j)

如果a=b,輸出c;

如果a=d,輸出e;

如果a=f,輸出g;

如果b,d,f都不滿足a,輸出h.

--輸出顯示每個訂單編號及支付方式,支付方式要麼是現金,要麼是信用卡,否則就是未知數。

select id,decode(payment_type,'cash','現金','credit','信用卡','未知數' )

from s_ord;

10.case when 可以把它看成switch功能;

select name 部門名,

case region_id

when 1 then '北美'

when 2 then '南美'

when 3 then '中東'

when 4 then '亞洲'

when 5 then '歐洲'

else '未知區域'

end "區域名"

from s_dept;

注意:case後面是否出現列名,取決於when後面條件是否出現比較列

如果when後面已經出現列名,那case後面務必不能寫列名,

如果when後面是值,那麼必須在case後面指定列名,否則無法確定所給的值的真正含義

日期函式 

oracle預設的日期格式為 dd-mon-yy

select sysdate from daul;

dd 表示2位數的日

mon/month 表示月份,如:6月

mm 表示2位數的月,如:06

yyyy 表示4位數的年份

hh24 表示24小時

hh 表示12小時

mi 表示分鐘

ss 表示秒

fm 表示去掉前面的0,如:fm 06,值為6

day 表示星期幾

1.months_between(date1,date2) 2個日期之間的月數

--查詢2023年11月1日和2023年12月9日之間的間隔月數

select trunc(abs(months_between(to_date('2014-11-1','yyyy-mm-dd'),to_date('2016-12-9','yyyy-mm-dd'))),0) from dual;

2.add_months(date1,n) 在date1的基礎上加n個月

--半年後的日期是什麼?

select add_months(sysdate,6) from dual;

3.next_day(date1,'星期幾') 在date1的基礎上,下星期幾是什麼時候

--下乙個星期五是幾號?

select next_day(next_day(sysdate,'星期五')) from dual;

Oracle中的SQL語句

1.選擇部門30中的所有員工.select empno as 部門編號 ename as 員工名稱 job 員工工作 mgr 領導姓名 hiredate sal,comm deptno from emp where deptno 30 select from emp 2.列出所有辦事員 clerk ...

idea中幾個常用的sql語句

idea中的xml檔案中幾個常用的sql語句 1,模糊搜尋 and 你的變數 like concat 2,正則判斷字串獲取最大值 select max r.number from 表名 r where r.is deleted 0 and r.number regexp 0 9.0 and leng...

oracle中的SQL語句(一)

oracle中有些語句和標準sql有些細微差別。現在總結一些。oracle中的sql語句總結 1.建立資料表 create table scott director director id number 6 not null,name varchar2 10 not null,zhicheng va...