oracle函數大全

數字函數

1.1、ABS(n)函數
描述:返回數值n的絕對值。

Examples:select abs(-15) “test” from dual;

1.2、ACOS(n)函數
描述:返回數值n的反餘弦值。輸入數值範圍在-1~1之間,返回值爲弧度。

Examples:select acos(0.6) “test”,acos(-.6) “test1” from dual;

1.3、COS(n)函數
描述: 返回數值n的餘弦值。返回值爲弧度。

Examples:select cos(1.6) “test”,cos(-6) “test1” from dual;

1.4、SIN(n)函數
描述: 返回數值n的正弦值。

Examples:select sin(1.6) “test”,sin(-6) “test1” from dual;

1.5、ASIN(n)函數
描述: 返回數值n的反正弦值。輸入數值範圍在-1~1之間,返回值爲弧度。

Examples:select asin(0.6) “test”,asin(-0.6) “test1” from dual;

1.6、TAN(n)函數
描述: 返回數值n的正切值。

Examples:select tan(6) “test”,tan(-0.6) “test1” from dual;

1.7、ATAN(n)函數
描述: 返回數值n的反正切值。輸入數值任意,返回值爲弧度。

Examples:select atan(6) “test”,atan(-0.6) “test1” from dual;

1.8、ATAN2(n,m)函數
描述: 返回數值n/m的反正切值。輸入數值任意,返回值爲弧度。

Examples:select atan2(19,3) “test”,atan2(-9,-0.9) “test1” from dual;

1.9、SINH(n)函數
描述: 返回數值n的雙曲正弦值。輸入數值任意。

Examples:select sinh(6) “test”,sinh(-0.6) “test1” from dual;

1.10、TANH(n)函數
描述: 返回數值n的雙曲正切值。輸入數值任意。

Examples:select tanh(6) “test”,tanh(-0.6) “test1” from dual;

1.11、CEIL(n)函數
描述: 返回大於等於數值n的最小整數。

Examples:select ceil(6) “test”,ceil(6.6) “test1” from dual;

1.12、COSH(n)函數
描述: 返回數值n的雙曲餘弦值。

Examples:select cosh(6) “test”,cosh(6.6) “test1” from dual;

1.13、EXP(n)函數
描述: 返回e的n次冥。(e=2.71828183…)

Examples:select exp(6) “test” from dual;

1.14、FLOOR(n)函數
描述: 返回小於等於數值n的最大整數。

Examples:select floor(6) “test”,floor(9.3) “test1” from dual;

1.15、LN(n)函數
描述: 返回數值n的自然對數。(n必須大於0)

Examples:select ln(6) “test” from dual;

1.16、LOG(m,n)函數
描述: 返回以m爲底的數值n的對數。(m>1,n>0)

Examples:select log(6,3) “test” from dual;

1.17、MOD(m,n)函數
描述: 返回m/n後的餘數,若n=0,則返回m(求模運算)

Examples:select mod(6,3) “test” from dual;

1.18、POWER(m,n)函數
描述: 返回m的n次冥

Examples:select power(6,3) “test” from dual;

1.19、ROUND(n,[m])函數
描述: 執行四捨五入運算,m可以省略,當省略m時,四捨五入到整數位;當m爲正數時,四捨五入到小數點後m位;當m爲負數時,四捨五入到小數點前m位。

Examples:select round(6.698,2) “test” from dual;

1.20、SIGN(n)函數
描述: 檢測數值的正負,當n<0則返回-1;當n>0則返回1,當n=0返回0。

Examples:select sign(6.698) “test”,sign(-9) “test1”,sign(0) “test2” from dual;

1.21、SQRT(n)函數
描述: 返回數值n的平方根。(n>=0)

Examples:select sqrt(6.698) “test” from dual;

1.22、TRUNC(n,[m])函數
描述: 截取數值n,m可以省略,當省略m時則截取n的小數部分;當m爲正數時則將n截取到小數點後m位;當m爲負數時則將n截取到小數點前m位

Examples:select trunc(6.698,2) “test”,trunk(696.3,-2) “test1” from dual;

字符函數


說明:字符函數輸入值爲字符類型,返回值爲字符類型或數字類型,可以在sql語句中直接使用,也可以在pl/sql塊中使用。

2.1、ASCII(n)函數
描述: 返回字符串的ascii碼(當輸入爲字符串時返回第一個字符的ascii碼)

Examples:select ascii(‘A’) “test”,ascii(‘我們’) “test1” from dual;

2.2、CHR(n)函數
描述: 返回對應的ascii碼的字符(n必須爲數字類型)

Examples:select ascii(54992) “test” from dual;

2.3、CONCAT(n,m)函數
描述: 連接n和m,n和m可以是字符,也可以是字符串。作用和”||”一樣。

Examples:select concat(‘中國’,’人民’) “test” from dual;

2.4、INITCAP(n)函數
描述: 將字符串n中每個單詞首字母大寫,其餘小寫(區分單詞的規則是按空格或非字母字符;可以輸入中文字符,但沒有任何作用)

Examples:select initcap(‘中 國 人 民’) “test”,initcap(‘my word’) “test1”,initcap(‘my中國word’) “test2” from dual;

2.5、INSTR(chr1,chr2,[n,[m]])函數
描述: 獲取字符串chr2在字符串chr1中出現的位置。n和m可選,省略是默認爲1;n代表開始查找的起始位置,當n爲負數從尾部開始搜索;m代表字串出現的次數。

Examples:select instr('pplkoopijk','k',-1,1) “test” from dual;

備註:當n爲負數從尾部搜索,但返回值仍然是按正向排列得出的位置。

2.6、LENGTH(n)函數
描述: 返回字符或字符串長度。(當n爲null時,返回nll;返回的長度包括後面的空格)

Examples:select length('ppl ') “test”,length(null) “test1” from dual;

2.7、LOWER(n)函數
描述: 將n轉換爲小寫。

Examples:select lower('KKKD') “test” from dual;

2.8、LPAD(chr1,n,[chr2])函數
描述: 在chr1左邊填充字符chr2,使得字符總長度爲n。chr2可選,默認爲空格;當chr1字符串長度大於n時,則從左邊截取chr1的n個字符顯示。

Examples:select lpad('kkk',5) “test”,lpad(‘kkkkk’,4) “test1”,lpad(‘kkk’,6,’lll’) “test2” from dual;

2.9、LTRIM(chr,[n])函數
描述: 去掉字符串chr左邊包含的n字符串中的任何字符,直到出現一個不包含在n中的字符爲止。

Examples:select ltrim('abcde',’a’) “test”,ltrim(‘abcde’,’b’) “test1”,ltrim(‘abcdefg’,’cba’) “test2” from dual;

2.10、NLS_INITCAP(chr,[’nls_param’])函數
描述: 將chr首字母大寫。Nls_param可選,指定排序的方式。(有SCHINESE_RADICAL_M(部首、筆畫),SCHINESE_STROKE_M(筆畫、部首),SCHINESE_PINYIN_M(拼音))

Examples:select nls_initcap('ab cde') “test”,nls_initcap(‘a b c d e’,’nls_sort= SCHINESE_PINYIN_M’) “test1” from dual;

2.11、NLS_LOWER(chr,[‘nls_param’])函數
描述: 將字符串轉換爲小寫。Nls_param可選,指定排序的方式。(有SCHINESE_RADICAL_M(部首、筆畫),SCHINESE_STROKE_M(筆畫、部首),SCHINESE_PINYIN_M(拼音))

Examples:select nls_lower('ABC') “test”,nls_lower(‘ABC’,’nls_sort= SCHINESE_PINYIN_M’) “test1” from dual;

2.12、NLSSORT(col,[’nls_param’])函數
描述: 根據nls_param指定的方式對col字段進行排序。

Examples:SELECT part_number FROM cux_om_part_all ORDER BY nlssort(part_number,'nls_sort=SCHINESE_RADICAL_M')

2.13、NLS_UPPER(chr,[‘nls_param’])函數
描述: 將chr轉換爲大寫。Nls_param可選,用於指定排序規則

Examples:SELECT nls_upper('ddddd','nls_sort=xdanish') FROM dual

2.14、REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函數(10g新函數)
描述:字符串替換函數。相當於增強的replace函數。Source_string指定源字符表達式;pattern指定規則表達式;replace_string指定用於替換的字符串;position指定起始搜索位置;occurtence指定替換出現的第n個字符串;match_parameter指定默認匹配操作的文本串。

其中replace_string,position,occurtence,match_parameter參數都是可選的。

2.15、REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])函數(10g新函數)
描述:返回匹配模式的子字符串。相當於增強的substr函數。Source_string指定源字符表達式;pattern指定規則表達式;position指定起始搜索位置;occurtence指定替換出現的第n個字符串;match_parameter指定默認匹配操作的文本串。

其中position,occurtence,match_parameter參數都是可選的

Examples:select regexp_substr(‘http://www.oracle.com/products’,’http://([[:alnum:]]+\.?) {3,4} / ?’) “regexp_substr” from dual

2.16、REGEXP_LIKE(source_string, pattern
[, match_parameter])函數(10g新函數)
描述:返回滿足匹配模式的字符串。相當於增強的like函數。Source_string指定源字符表達式;pattern指定規則表達式;match_parameter指定默認匹配操作的文本串。

其中position,occurtence,match_parameter參數都是可選的

Examples:

2.17、REGEXP_INSTR(source_string, pattern
[, start_position
[, occurrence
[, return_option
[, match_parameter]]]])函數(10g新函數)

描述: 該函數查找 pattern ,並返回該模式的第一個位置。您可以隨意指定您想要開始搜索的 start_position。 occurrence 參數默認爲 1,除非您指定您要查找接下來出現的一個模式。return_option 的默認值爲 0,它返回該模式的起始位置;值爲 1 則返回符合匹配條件的下一個字符的起始位置

Examples:

 

附註:上面紅色標題的四個函數是oracle 10g纔有的函數,使用正則表達式可以實現很強大的功能。鑑於變化太多,可以參考oracle的官方文檔:SQL Reference(第七章)
2.18、REPLACE(chr,search_string,[,replacement_string])函數
描述:將chr中滿足search_string條件的替換爲replacement_string指定的字符串,當search_string爲null時,返回chr;當replacement_string爲null時,返回chr中截取掉search_string部分的字符串。

Examples: SELECT REPLACE('abcdeef','e','oo') "test",REPLACE('abcdeef','ee','oo') "test1",REPLACE('abcdeef',NULL,'oo') "test2",REPLACE('abcdeef','ee',NULL) "test3" FROM dual

2.19、RPAD(chr1,n,chr2)函數
描述:在chr1右邊填充chr2,使返回字符串長度爲n..當chr1長度大於n時,返回左端n個字符。參考LPAD()函數。

2.20、RTRIM(chr,[set])函數
描述:去掉chr右邊包含的set中的任何字符,直到出現一個不是set中的字符結束。參考LTRIM()函數。

2.21、SOUNDEX(chr)函數
描述:返回字符串的語音表示,可以用來比較字符串的發音是否相同。

Examples:select soundex(‘ship’) “test”,soundex(‘sleep’) “test1” from dual;

2.22、SUBSTR(chr,m[,n])函數
描述:取chr的子串。M代表開始位置,n是要取的長度。當m爲0時從首字符開始,當m爲負時從字符串尾部開始截取。

Examples:select substr(‘abcdef’,0,3) “test”,substr(‘abcdef’,1,3) “test1”,substr(‘abcdef’,-3,3) “test2”,substr(‘abcdef’,-1,3) “test3” from dual

注意:m取0或1時,開始位置是一樣的,都是從第一位開始,m爲負的時候,仍然是按從左到右的順序取,所以如果m爲-1,n的長度再大,也只能取到最後一個字符,因爲chr右邊已經沒有字符了。

2.23、TRANSLATE(chr,from_str,to_str)函數
描述:另一種替換函數的用法。

Examples: SELECT translate('abcdeabc','abc','fgh') "test",translate('abcdeabc','abc','hf') "test1",translate('abcdeabc','ab','hfgh') "test2",translate('abcdeabc','abc',' ') "test3" FROM dual

注意:匹配的規則是from_str和to_str每個字符按順序相對應,如果from_str字符少於to_str中的字符,則只替換能對應的字符,to_str後面不能和from_str對應的字符則不管,如果from_str字符多於to_str字符,則from_str中找不到對應字符按照null來處理。

2.24、TRIM(chr)函數
TRIM函數將字符串的前綴(或尾隨)字符刪除。

其具體的語法格式如下:

TRIM([LEADING|TRAILING|BOTH][trimchar FROM] string)

其中:

LEADING 指明僅僅將字符串的前綴字符刪除

TRAILING 指明僅僅將字符串的尾隨字符刪除

BOTH 指明既刪除前綴字符,也刪除尾隨字符。這也是默認方式

string 任意一待處理字符串

trimchar 可選項。指明試圖刪除什麼字符,默認被刪除的字符是空格

下面是該函數的使用情況:

TRIM(’ Ashley ’)=‘Ashley’

TRIM(LEADING ’*’ FROM’***Ashley***’)=‘Ashley***’

2.25、UPPER(chr)函數
UPPER函數間返回字符串的大寫形式。

其具體的語法格式如下:

UPPER(string)

其中:

string 任意VARCHAR2或CHAR型字符串

下面是該函數的使用情況:

UPPER(’THIS IS a Test’)=‘THIS IS A TEST’

日期函數

3.1、add_months(d,n)
說明:用於從一個日期值增加或減少一些月份,d代表一個日期,n爲正數則代表在d日期 上增加n月份,n爲負數則代表在d日期上減少n月
例:select add_months(sysdate,12) "Next Year" from dual;
3.2、current_date()

說明:返回當前會話時區中的當前日期時間
alter session set time_zone=’-11:00’(更改當前會話時區命令)
例:select sessiontimezone,current_date from dual;
3.3、dbtimezone()

說明:返回數據庫實例時區
select dbtimezone from dual;
3.4、extract()

說明:顯示指定格式的日期值。
select extract(month from sysdate) "This Month" from dual;
select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
3.5、last_day()

說明:返回包含了日期參數的月份的最後一天的日期
select last_day(sysdate) "last" from dual;
3.6、months_between(d1,d2)

說明:返回d1和d2兩個月份之間相差的月數,若d1<d2,返回負數;d1>d2,返回正數;若d1和d2都是月底或者天數相同,則返回整數,否則以每月31天爲基準數返回小數。
select months_between(to_date('2007-01-31','yyyy-mm-dd'),to_date('2006-11-30','yyyy-mm-dd')) from dual;
3.7、next_day(d,varchar2)

說明:返回日期d指定的在日期d之後的第一個工作日;

SELECT next_day(SYSDATE,'星期四') FROM dual;

Select next_day(sysdate,’monday’) from dual; 錯誤,不能使用英文單詞

返回當前日期後的第一個星期四的日期。若當前日期已經是星期四或過了星期四,則返回下週的星期四對應的日期,否則返回本週星期四的日期。

注意:varchar2指定工作日的時候和當前數據庫實例的參數設置有關,字符串需要用中文寫,如果中文不行,就使用英文星期代表。

3.8、round(d,fmt)
說明:返回日期時間的四捨五入結果。如果fmt指定年,則以7月1日爲分界;如果指定月,則以16日爲分界;關於按天來四捨五入,在測試時無法理解(資料上解釋按天的時候是以中午12:00爲分界)

Select round(sysdate,’month’) from dual;

3.9、trunc(d,fmc)
說明:按照指定的格式截斷日期,如果指定格式爲年,則結果爲本年1月1日,如果格式指定爲月,則結果爲本月1日,關於格式指定爲天還未理解。

SELECT trunc(SYSDATE,'month') FROM dual;

3.10、sysdate

應用:
1. 日期和字符轉換函數用法(to_date,to_char)

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期轉化爲字符串
select to_char(sysdate,'yyyy') as nowYear from dual; //獲取時間的年
select to_char(sysdate,'mm') as nowMonth from dual; //獲取時間的月
select to_char(sysdate,'dd') as nowDay from dual; //獲取時間的日
select to_char(sysdate,'hh24') as nowHour from dual; //獲取時間的時
select to_char(sysdate,'mi') as nowMinute from dual; //獲取時間的分
select to_char(sysdate,'ss') as nowSecond from dual; //獲取時間的秒


select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//

2. select to_char( to_date(222,'J'),'Jsp') from dual

顯示Two Hundred Twenty-Two

3.求某天是星期幾
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
monday
設置日期語言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以這樣
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

4. 兩個日期間的天數
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

5. 時間爲null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from dual;

注意要用TO_DATE(null)

6.月份差
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那麼12月31號中午12點之後和12月1號的12點之前是不包含在這個範圍之內的。
所以,當時間需要精確的時候,覺得to_char還是必要的

7. 日期格式衝突問題
輸入的格式要看你安裝的ORACLE字符集的類型, 比如: US7ASCII, date格式的類型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中寫
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
注意我這只是舉了NLS_DATE_LANGUAGE,當然還有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS
8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not in ( '1', '7' )

查找2002-02-28至2002-02-01間除星期一和七的天數
在前後分別調用DBMS_UTILITY.GET_TIME, 讓後將結果相減(得到的是1/100秒, 而不是毫秒).

9. 查找月份
select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1
select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1.03225806451613

10. Next_day的用法
Next_day(date, day)

Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D

11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一條記錄的TIME 與最後一行是一樣的
可以建立一個函數來處理這個問題
create or replace function sys_date return date is
begin
return sysdate;
end;

select to_char(sys_date,'hh:mi:ss') from all_objects;

12.獲得小時數
extract()找出日期或間隔值的字段值
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19


13.年月日的處理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days

from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,
newer_date,
older_date
from (
select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date
from emp
)
)

14.處理月份天數不定的辦法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

16.找出今年的天數
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

閏年的處理方法
to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )
如果是28就不是閏年

17.yyyy與rrrr的區別
'YYYY99 TO_C
------- ----
yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001

18.不同時區的處理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

19.5秒鐘一個間隔
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
from dual

2002-11-1 9:55:00 35786
SSSSS表示5位秒數

20.一年的第幾天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual

310 2002-11-6 10:03:51

21.計算小時,分,秒,毫秒
select
Days,
A,
TRUNC(A*24) Hours,
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
from
(
select
trunc(sysdate) Days,
sysdate - trunc(sysdate) A
from dual
)

select * from tabname
order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

//
floor((date2-date1) /365) 作爲年
floor((date2-date1, 365) /30) 作爲月
d(mod(date2-date1, 365), 30)作爲日.

23.next_day函數 返回下個星期的日期,day爲1-7或星期日-星期六,1表示星期日
next_day(sysdate,6)是從當前開始下一個星期五。後面的數字是從星期日開始算起。
1 2 3 4 5 6 7
日 一 二 三 四 五 六

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

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual
日期 返回的是天 然後 轉換爲ss

24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
select sysdate S1,
round(sysdate) S2 ,
round(sysdate,'year') YEAR,
round(sysdate,'month') MONTH ,
round(sysdate,'day') DAY from dual

25,trunc[截斷到最接近的日期,單位爲天] ,返回的是日期類型
select sysdate S1,
trunc(sysdate) S2, //返回當前日期,無時分秒
trunc(sysdate,'year') YEAR, //返回當前年的1月1日,無時分秒
trunc(sysdate,'month') MONTH , //返回當前月的1日,無時分秒
trunc(sysdate,'day') DAY //返回當前星期的星期天,無時分秒
from dual

26,返回日期列表中最晚日期
select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

27.計算時間差
注:oracle時間差是以天數爲單位,所以換算成年月,日

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //時間差-年
select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //時間差-月
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //時間差-天
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //時間差-時
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //時間差-分
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //時間差-秒

28.更新時間
注:oracle時間加減是以天數爲單位,設改變量爲n,所以換算成年月,日
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-年
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改變時間-月
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-日
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-時
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-分
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-秒

29.查找月的第一天,最後一天
SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
FROM dual;

轉換函數

4.1、asciistr(str)
說明:將任意字符集的字符串轉換爲當前數據庫實例對應的ascii字符串。

SELECT asciistr('中華民族') FROM dual;

備註:和該函數相似的有ascii,它是取得字符串第一個字符的ascii碼,後面的字符不管;chr是將ascii碼轉換爲對應的字符。

4.2、cast()
說明:將一個內置數據類型或集合類型轉變爲另一個內置數據類型或集合類型。

SELECT CAST(SYSDATE AS VARCHAR2(100)) FROM dual;

4.3、chartorowid(str)
說明:將字符串轉變爲rowid數據類型,但字符串必須符合rowid格式。

4.4、convert(str,char_set,source_char_set)
說明:將字符串從一個字符集轉變爲另一個字符集。Str爲要轉變的字符串,char_set爲轉變後的字符集,source_char_set爲該字符串原始的字符集。

SELECT convert('中國','US7ASCII','ZHS16GBK') FROM dual;

4.4、rowidtochar(rowid)
說明:將rowid轉換爲對應的varchar2數據類型值。

4.5、to_char()
select to_char(n’中國’) from dual; 轉變爲本地字符集類型

select to_char(10000,’L99G999D99MI’) from dual; 轉換成貨幣格式

4.6、to_date()
轉變爲日期格式。

4.7、to_number()
將字符串轉變爲數字值,但字符串必須是數字(0~9)。

單行函數

decode(exer.search1,result1[search2,result2,...][,defalut])
用於匹配特定表達式的結果,如果search1匹配於exer,則返回result1,如果search2匹配於exer則返回result2,
依次類推,如果沒有任何匹配關係則返回defalut

分組函數


6.1AVG 取平均值
Select AVG(SAL) From EMP

6.2max 取最大值
select max(sal) from emp

6.3min 取最小值
select min(sal) from emp

6.4count 取記錄數
SELECT COUNT(*) FROM EMP
也可以
select count(empno) from emp
注意:
要麼count(*)
要麼count(沒有null值的列---主鍵)

 

6.5sum 求和
Select SUM(SAL*12) From EMP

應用:

1.分組函數和distinct關鍵詞的搭配
Select COUNT(Distinct SAL) From EMP

 

2.組函數與空值
select count(comm) from emp
空值不參與運算,直接被過濾掉

 

3.分組數據
group by子句
SELECT COUNT(*) FROM EMP GROUP BY DEPTNO

4.使用group by規則
A.group by後面的字段不必顯示在select列表中
B.反之則不行
也就是說:select後面的字段必須在group by子句中出現
例外的是:
在組函數(count,max,min等)中出現的字段除外

5.關於group by條件分組的問題
A.group by可以和where來搭配
where只能在group by的前面
Select JOB From EMP Where SAL>2000 Group By JOB
group by後面不能有where

B.where子句中不能包括組函數
條件的表達只能使用having來表示
Select DEPTNO,Max(SAL),Min(SAL) From EMP Group By DEPTNO Having Max(SAL)>2000

對象函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章