數據庫系統函數

stu表:
lily 18 1
mary 19 2
bob 18 3
jessie 20 4
nancy 21 5

1字符函數
length函數
select *,length(‘abcd長’) from stu;
lily 18 1 7
mary 19 2 7
bob 18 3 7
jessie 20 4 7
nancy 21 5 7

trim函數 (去除空格函數)
select ltrim(’ abcd’) from stu;–截左邊的空格
select rtrim(’ abcd ‘) from stu;–截右邊的空格
select trim(’ abcd ‘) from stu;–截所有的空格
–如果字段類型是定長的,長度始終是規定的長度,所以查詢的時候應該採用trim函數去掉空格

substr函數 (截取字符函數)
select substr(‘abcdefg’,2,3) from stu;從第二個字符取,取三個字符
bcd
bcd
bcd
bcd
bcd
select substr(‘abcdefg’,length(‘abcdefg’)-3+1,3) from stu;右取三個字符
efg
efg
efg
efg
efg

REPLACE函數(字符串替代函數)
REPLACE(‘string’,’s1’,’s2’)
–string 希望被替換的字符或變量
–s1 被替換的字符串
–s2 要替換的字符串
select replace(‘我的fid是22333’,’我’,’他’) from dual; 結果爲:他的fid是22333

translate函數(字符級替代函數)

字符替代函數

SELECT translate(‘acdd’,’cd’,’ef’) FROM dual; –aeff 直接將字母c換爲e,字母d換爲f

如果是replace函數 SELECT REPLACE(‘acdd’,’cd’,’ef’) FROM dual; –aefd 直接將cd換爲ef

LOWER函數

返回字符串,並將所有的字符小寫

UPPER函數

返回字符串,並將所有的字符大寫

initcap函數

select initcap(‘ownership’) from G3E_ATTRIBUTE –所選取的字段第一個字母用大寫字母表示

                                                                                                                                                           CONTACT函數 相當於||

select ‘g3e_fid’||’設施特徵唯一編號’ a from G3E_ATTRIBUTE_BAK;

select concat(‘g3e_fid’,’設施特徵唯一編號’) a from G3E_ATTRIBUTE_BAK;

instr函數

INSTR(C1,C2,I,J) 在一個字符串中搜索指定的字符,返回發現指定的字符的位置;

C1 被搜索的字符串

C2 希望搜索的字符串

I 搜索的開始位置,默認爲1

J 出現的位置,默認爲1

select instr(‘General Number’,’er’,1,2) instring from G3E_ATTRIBUTE_BAK;

J爲2則選擇的是Number中的er;結果爲13

J爲1則選擇的是General中的er;結果爲4

RPAD和LPAD函數

RPAD(char1,n,char2) 在字符串char1的右邊填充字符char2,直至字符串的總長度爲n,char2的默認值爲空格。如果char1長度大於n,則該函數返回char1左端的n個字符。

LPAD (char1,n,char2)在字符串char1的左邊填充字符char2,直至字符串的總長度爲n,char2的默認值爲空格。如果char1長度大於n,則該函數返回char1左端的n個字符。 select lpad(rpad(‘G3E_FID’,12,’是111’),14,’我的’)from DUAL;

–結果爲:我G3E_FID是111–12和14表示粘貼字符後的字符數,如果超過規定的字符數就不粘貼了

CHR函數

ASCII 碼值轉換爲字符

select chr(45) from dual;結果爲:-

ASCII函數

ASCII(char):該函數用於返回字符串首字符的ASCII碼值。

2日期

sysdate –系統時間

select sysdate from dual;

current_date –當前時間

select current_date from dual;

next_day 返回指定日期的下一個指定日期

select next_day(sysdate,’星期一’) from dual;

返回:2010-8-30 17:35:01 (現在爲2010-8-24 )8-30正好爲下一個星期一

alter session set nls_date_format=’dd-mon-yyy hh:mi:ss’

select next_day(sysdate,’星期六’)from dual;–當前時間的下一個星期六

add_months

add_months(d,n) 查看特定時間的d之前n月或D之後N月的時間

select add_months(sysdate,-14) from dual; 結果爲2009-6-24 16:53:57(當前系統時間2010-8-24 16:53:57)

current_timestamp 返回當前會話時區的日期時間

select current_timestamp from dual;結果爲:24-8月 -10 04.57.06.593000 下午 +08:00

dbtimezone 返回數據庫所在時區

select dbtimezone from dual; 結果爲: +08:00

extract 用於從日期時間中提取所需的數據

select extract(year from sysdate) from dual; 結果爲2010

FROM_TZ 用於將特定時區的timestamp值轉爲timestamp with time zone

select FROM_TZ(TIMESTAMP ‘2004-8-24 17:03:56’,’1:00’) from dual;

結果爲:24-8月 -04 05.03.56.000000000 下午 +01:00

last_day 返回特定日期所在月份的最後一天。

select last_day(sysdate) from dual;

localtimestamp返回當前會話時區的日期時間

select localtimestamp from dual; 結果:24-8月 -10 05.17.20.750000 下午

months_between(d1,d2) 返回日期d1和d2之間相差的月數,若d1小於d2,返回負數,若d1和d2的天數相同或都是月底,返回整數

select months_between(sysdate,’8-8月-2008’) from dual; 返回:24.5395725059737

new_time(date1,zone1,zone2):返回時區一的日期時間所對應的時區二的日期時間

select new_time(to_date(‘2010-8-24 17:28:35’,’yyyy-mm-dd hh24:mi:ss’), ‘bst’,’est’) from dual;

返回:2010-8-24 23:28:35

numtodsinterval(n,char_expr) 數字轉換爲時間,可轉換爲時、分、秒、天

char_expr可以是day,hour,minute,second

select numtodsinterval(1000,’minute’) from dual; 1000轉爲分結果:+000000000 16:40:00.000000000

numtoyminterval(n,char_expr):將數字n轉換爲interval year to month格式,其中char_expr可以是year或month

select numtoyminterval(100000,’month’) from dual;返回+000008333-04

sessiontimezone:返回當前會話所在時區

select sessiontimezone from dual; 返回+08:00

sys_extract_utc(datetime_with_timezone):返回特定時區時間所對應的格林威治時間

select sys_extract_utc(systimestamp) from dual; 返回24-8月 -10 11.54.09.015000 上午

systimestamp 返回當前系統的日期時間和時區

select systimestamp from dual;返回24-8月 -10 07.55.46.828000 下午 +08:00

ROUND和TRUNC函數

ROUND(n,[m]):該函數用於執行四捨五入運算;如果省略m,則四捨五入至整數位;如果m是負數,則四捨五入到小數點前m位;如果m是整數,則四捨五入至小數點後m位。

TRUNC(n,[m]) 該函數用於截取數字。如果省略數字m,則將數字n的小數部分截去;如果數字m是整數,則將數字n截取至小數點後的第m位;如果數字m是負數,則將數字n截取至小數點的前m位。

to_dsinterval(char[,’nls_param’]) 將符合特定日期和時間格式的字符串轉變爲interval day to second 類型

select TO_DSINTERVAL(‘100 10:00:00’) from dual; 返回:+000000100 10:00:00.000000000

to_timestamp 將符合特定日期和時間格式的字符串轉變爲timestamp類型

select to_timestamp(‘03-8月-10’) from dual;返回:03-8月 -10 12.00.00.000000000 上午

to_timestamp_tz 將符合特定日期和時間格式的字符串轉變爲timestamp with time zone類型

select to_timestamp_tz(‘2003-08-10’,’yyyy-mm-dd’) from dual;返回:10-8月 -03 12.00.00.000000000 上午 +08:00

to_yminterval(char): 將字符串轉變爲interval year to month類型

select sysdate+to_yminterval(‘01-01’) from dual;

返回當前時間的一年零一個以後的時間:2011-9-24 20:13:20

tz_offset 用於返回特定時區與UTC(格林威治時間)相比的時區偏移

select tz_offset(‘EST’) from dual; 返回:-04:00

3轉換

to_char,to_date,to_number,cast

select sysdate from dual;

select to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual;

select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;

select to_date(‘12-3月-04’) from dual;select to_number(‘3333’) from dual;

cast(expr as type_name):該函數用於將一個內置數據類型或集合類型轉變爲另一個內置數據類型或集合類型。

select gwm_ano, cast( gwm_ano as varchar2(50) ) cat from gwm_attribute;

4聚集函數

sum,avg,max,min,count

COUNT()函數

SELECT COUNT(au_lname) FROM authors

AVG()函數

SELECT AVG(vote) FROM opinion

函數AVG()只能對數值型字段使用

SUM()函數

SELECT SUM(purchase_amount) FROM orders

MAX()函數 SELECT MAX(vote) FROM opinion

MIN()函數 SELECT MIN(vote) FROM opinion

5、數字函數

ABS函數

ABS(n),該函數用於返回數字n的絕對值。示例如下,
declare
v_abs number(6,2);
begin
v_abs:=abs(&no);
dbms_output.put_line(‘絕對值:’||v_abs);
end;
輸入no的值:-12.6,
絕對值:12.6

ASIN函數

ASIN(n):該函數用於返回數字n的反正弦值,輸入範圍範圍-1-1,輸出值的單位爲弧度。示例如下:
declare
v_asin number(6,3);
begin
v_asin:=asin(.3);
dbms_output.put_line(‘0.3的反正弦值:’||v_asin);
end;
0.3的反正弦值:.305

ACOS函數

ACOS(n):該函數用於返回數字n的反餘弦值,輸入值的範圍-1-1,輸出值的單位爲弧度。示例如下:
select acos(.3),acos(-.3) from dual;

TAN函數

TAN(n)該函數用於返回數字n(以弧度表示的角)的正切值。

TANH函數

TANH(n)該函數用於返回數字n(以弧度表示的角)的雙曲正切值。

ATAN函數

ATAN(n):該函數用於返回數字n的反正切值,輸入值範圍可以是任何數字,輸出值的單位爲弧度。示例如下:
select atan(59),atan(55) from dual;

ATAN2函數

ATAN2(n,m):該函數用於返回數字n除以數字m的反正切值。輸入值除了m不能爲0外,可以是任意數字(m不能爲0),輸出值的單位爲弧度。示例如下:

declare
v_atan2 number(6,3);
begin
v_atan2:=atan2(19,3);
dbms_output.put_line(‘19/3的反正切值:’||v_atan2);
end;
19/3的反正切值:1.414

CEIL函數

返回大於或等於給出數字的最小整數

select ceil(3.1415927) from dual;

SIN函數

SIN(n)該函數用於返回數字n(以弧度表示的角)的正弦值。

SINH函數

SINH(n)該函數用於返回數字n的雙曲餘弦值。

COS函數

COS(n):該函數用於返回數字n(以弧度表示的角度值)的餘弦值。
declare
v_cos number(6,3);
begin
v_cos:=cos(0.5);
dbms_output.put_line(‘0.5的餘弦值:’||v_cos);
end;
0.5的餘弦值:.878

COSH函數

COSH(n):該函數用於返回數字n的雙曲餘弦值。示例如下:
select cosh(0) “0的雙曲餘弦值” from dual;

EXP函數

EXP(n):該函數用於返回e的n次冪(e=2.71828183。。。)。示例如下:
declare
v_exp number(6,2);
begin
v_exp:=exp(4);
dbms_output.put_line(‘e的4次方:’||v_exp);
end;

e的4次方:54.

SQRT函數

SQRT(n)該函數用於返回數字n的平方根,並且數字n必須大於等於0。

FLOOR函數

該函數用於返回小於等於數字n的最大整數

select floor(2345.67) from dual; 2345

LN函數

LN(n):該函數用於返回數字n的自然對數,其中數字n必須大於0。示例如下:
declare
v_ln number(6,2);
begin
v_ln:=ln(4);
dbms_output.put_line(‘4的自然對數:’||v_ln);
end;
4的自然對數:1.39

LOG函數

LOG(m,n):該函數用於返回數字m爲底的數字n的對數,數字n可以是除0和1以外的任何正整數,數字n可以是任何正整數。示例如下:

select log(2,8),log(10,100) from dual;

MON函數

MON(m,n):該函數用於取得兩個數字相除後的餘數。如果數字n爲0,則返回結果爲m。
declare
v_mod number(6,2);
begin
v_mod:=mod(10,3);
dbms_output.put_line(‘10除3的餘數:’||v_mod);
end;
10除3的數:1

POWER函數

POWER(m,n):該函數用於返回數字m的n次冪,底數m和指數n可以是任意數字。但是如果數字m爲負數,則數字n必須大於整數。

SIGN函數 取數字n的符號,大於0返回1,小於0返回-1,等於0返回0

6、10g新增函數

Oracle 8 和Oracle 9i中缺乏靈活性的SQL 正則表達式最終在Oracle 10g中得到了解決。Oracle 數據庫目前內建了符合POSIX 標準的正則表達式

四個新的函數分別是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和 REGEXP_REPLACE。它們在用法上與Oracle SQL 函數LIKE、INSTR、SUBSTR 和REPLACE 用法類似,但是它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字符。

這四個函數支持正則表達式

正則表達式字符說明:

特殊字符含義:
‘^’ 表示字符串的開始
.[az]ASCII[[:lower:]]?+()[]m,nm=<<=nmmm,m|([az]+|[09]+) ’表示所有小寫字母或數字組合成的字符串。
\num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。

[^…]:匹配字符集以外的任意字符。例如:[^a-f] 匹配 a 到 f 以外的任意字符。

[…]:匹配一個字符集中的任意字符。在字符集中使用短劃線分隔第一個字符和最後一個字符。例如:

   [123] 匹配數字 1、2 或 3
   [a-f] 匹配從 a 到 f 的任意字母

字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[:punct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]

各種操作符的運算優先級
轉義符/
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
| “或”操作

具體的可見 http://www.google.com/support/a/bin/answer.py?hl=zh-CN&answer=1371415

測試數據:

create table test5(mc varchar2(60));
insert into test5 values(‘112233445566778899’);
insert into test5 values(‘22113344 5566778899’);
insert into test5 values(‘33112244 5566778899’);
insert into test5 values(‘44112233 5566 778899’);
insert into test5 values(‘5511 2233 4466778899’);
insert into test5 values(‘661122334455778899’);
insert into test5 values(‘771122334455668899’);
insert into test5 values(‘881122334455667799’);
insert into test5 values(‘991122334455667788’);
insert into test5 values(‘aabbccddee’);
insert into test5 values(‘bbaaaccddee’);
insert into test5 values(‘ccabbddee’);
insert into test5 values(‘ddaabbccee’);
insert into test5 values(‘eeaabbccdd’);
insert into test5 values(‘ab123’);
insert into test5 values(‘123xy’);
insert into test5 values(‘007ab’);
insert into test5 values(‘abcxy’);
insert into test5 values(‘The final test5 is is is how to find duplicate words.’);
commit;

REGEXP_LIKE函數
select * from test5 where regexp_like(mc,’^a{1,3}’);
select * from test5 where regexp_like(mc,’a{1,3}’);
select * from test5 where regexp_like(mc,’^a.*e$’);
select * from test5 where regexp_like(mc,’^[[:lower:]]|[[:digit:]]’);
select * from test5 where regexp_like(mc,’^[[:lower:]]’);
Select mc FROM test5 Where REGEXP_LIKE(mc,’[^[:digit:]]’);

Select mc FROM test5 Where REGEXP_LIKE(mc,’^[^[:digit:]]’);

REGEXP_INSTR函數
Select REGEXP_INSTR(mc,’[[:digit:]])fromtest5;112233445566778899SelectREGEXPINSTR(mc,[[:digit:]]+ ’) from test5;
Select REGEXP_INSTR(‘The price is $400.’,’\$[[:digit:]]+’) FROM DUAL;
Select REGEXP_INSTR(‘onetwothree’,’[^[[:lower:]]]’) FROM DUAL;
Select REGEXP_INSTR(‘,,,,,’,’[^,]*’) FROM DUAL;

Select REGEXP_INSTR(‘,,,,,’,’[^,]’) FROM DUAL;

REGEXP_SUBSTR函數
SELECT REGEXP_SUBSTR(mc,’[a-z]+’) FROM test5;
SELECT REGEXP_SUBSTR(mc,’[0-9]+’) FROM test5;

SELECT REGEXP_SUBSTR(‘aababcde’,’^a.*b’) FROM DUAL;

REGEXP_REPLACE函數
Select REGEXP_REPLACE(‘Joe Smith’,’( ){2,}’, ‘,’) AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE(‘aa bb cc’,’(.) (.) (.*)’, ‘\3, \2, \1’) FROM dual;

7其他

select user from dual;–查詢當前用戶

decode函數

select decode(sign(變量1-變量2),-1,變量1,變量2) from dual;

select sum(decode(‘sex’,’男’,1,0)) 男人數,sum(decode(‘sex’,’女’,1,0)) 女人數 from e;

sign()函數

根據某個值是0、正數還是負數,分別返回0、1、-1;

nvl函數

NVL函數的格式如下:NVL(expr1,expr2)

含義是:如果oracle第一個參數爲空那麼顯示第二個參數的值,如果第一個參數的值不爲空,則顯示第一個參數本來的值select a1,nvl(a2,’未輸入’),a3 from aa;–處理空值

NVL2函數

NVL2函數的格式如下:NVL2(expr1,expr2, expr3)

含義是:如果該函數的第一個參數爲空那麼顯示第二個參數的值,如果第一個參數的值不爲空,則顯示第三個參數的值。

NULLIF函數

NULLIF(expr1,expr2)函數的作用是如果exp1和exp2相等則返回空(NULL),否則返回第一個值。

Coalesce函數

Coalese函數的作用是的NVL的函數有點相似,其優勢是有更多的選項。

格式如下:Coalesce(expr1, expr2, expr3….. exprn)Coalesce是這樣來處理這些參數的。如果第一個參數爲空,則看第二個參數是否是空,否則則顯示第一個參數,如果第二個參數是空再看第三個參數是否爲空,否則顯示第二個參數,依次類推。這個函數實際上是NVL的循環使用

sys_guid ()函數

在Oracle 8i以後提供sys_guid ()方法

方法作用:

系統根據當前時間和機器碼,生成全球唯一的一個序列號。

方法使用場景:

  這在對象在不同機器的不同數據庫裏生成以及需要在後來合併到一起的情況下很有用,因爲這樣可以防止主鍵衝突。


   因爲採用sequence的話,只能保證在同一個數據中該序列號唯一,但是在不同的數據庫實例中有可能衝突。

該方法的弊端:

 由於sys_guid ()生成的序列號過長,這會消耗數據庫存儲空間,且管理不方便。

基於此,在非並行環境下的數據庫應用中,應儘量避免使用sys_guid ()

方法舉例:

select sys_guid() from dual;


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