Oracle SQL 基礎語句和基本函數


1、SQL 語句基礎

下面給出SQL語句的基本介紹。

1.1、SQL語句所用符號

操作符 用途 例子

+ - 表示正數或負數,正數可省去 + -1234.56

+ 將兩個數或表達式進行相加 A=c+b

- 將兩個數或表達式進行相減 34-12

* 將兩個數或表達式進行相乘 12*34

/ 除以一個數或表達式 18*11

NULL 空值判斷 Where name is null;

|| 字符串連接 ‘101-’||tel_num

= 等於測試 Select * from emp where name=’趙元傑’;

!= 或<>或^= 不等於測試 Select * from emp where name !=’趙元傑’;

< 小於測試 Select * from emp where sal < 5000;

> 大於測試 Select * from emp where sal > 5000;

<= 小於等於測試 Select * from emp where sal <= 5000;

>= 大於等於測試 Select * from emp where sal >= 5000;

Not in 測試某值是否在一個指定的結果集中 Select name,addr from expert where local not in(‘北京’,’上海’);

ANY 將一個值與一組值進行比較,返回滿足條件的結果。必須跟!=,<,>,<=,>= select ename,sal from emp where sal<= any(select sal from emp where deptno=10)

SOME 同ANY,必須跟!=,<,>,<=,>=

 

ALL 將一個值與一組值比較,返回滿足條件的所有列值。必須跟!=,<,>,<=,>= Select name,sal from emp w here sal<= all

( 500,800,1200);

Not between

A and B 判斷某個值是否界於兩者之間。 Select name,sal from emp Where

sal between 500 and 1200;

[not]exists 判斷某個列是否存在於一組值中。 select dname,deptno from dept where exists

(select * from emp where dept.deptno=emp.deptno)

A[not]like b

 

比較兩個模式是否相似,當使用like 語句時Oracle不去訪問索引。 Select * from emp

Where ename like ‘TH%’;

Is [not] null 測試值是否為空。 Select ename,deptno from emp

Where comm. Is null or comm.=0;

Not 對結果的否定。 Select * from emp Where sal not(sal<1000); 等價於select ename,sal from emp where sal>=1000;

AND 用於判斷兩個條件十分都滿足。 Select * from emp where

Ename=’SIMTH’ and sal>=1000;

OR 用於判斷兩個條件中是否有一個滿足。 Select * from emp where

Ename=’SIMTH’ or ename=’SCOTT’;

UNION 用於返回(組合)兩個查詢中所有唯一的行。 Select ename from emp union

Select ename from emp;

UNION ALL 用於返回(組合)兩個查詢中所有所有的行。

 

INTERSECT 用於返回兩個查詢中相同的行。 Select ename from emp1 intersect select ename from emp2;

MINUS 用於返回兩個查詢中的不同的行。

 

 

1.2、簡單select查詢

當我們可以用SQL*PLUS登錄到SQL>下后,我們可以用DESC 顯示某表的結構,也可以用select 語句簡單查詢表中的一些列的內容。

例:要查詢EMP表中員工的姓名、工資及出生日期,則:

SQL>select ename, sal, hiredate from emp;

偽列及偽表

Oracle系統為了實現完整的關系數據庫功能,系統專門提供了一組稱為偽列(Pseudocolumn)的數據庫列,這些列不是在建立對象(如建表)時由我們完成的,而是在我們建立對象時由自動Oracle完成的。Oracle目前有以下的偽列:

 

CURRVAL and NEXTVAL    使用序列號的保留字

 

LEVEL                  查詢數據所對應的級

 

ROWID                  記錄的唯一標識

 

ROWNUM              限制查詢結果集的數量

 

Oracle 還提供了一個DUAL 的偽表,該目的表主要是保證在使用SELECT 語句中語句的完整性而提供的,如:我們要查詢當前的系統日期及時間,而系統的日期和時間並是放在一個指定的表里。所以在 from 語句后就沒有表名給出。為了使用 from 后有個表名,我們就用DUAL代替。如:

 

例1:查詢Oracle系統日期及時間:

 

SQL> select to_char( sysdate,'yyyy.mm.dd hh24:mi:ss') from DUAL;

 

TO_CHAR(SYSDATE,'YY

 

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

 

2001.06.02 07:28:09

 

例2:計算一下 5000+5000*0.1 的結果是多少,則:

 

SQL> select 5000+5000*0.1 from DUAL;

 

5000+5000*0.1

 

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

 

         5500

1.3、SELECT語句

在關系數據庫中,使用頻率最高要算SELECT語句了。盡管SELECT 語句的使用非常簡單,但確很有學問。下面簡單介紹有關SELECT 語句的常用方法。

1.命令語法:

SELECT 的簡單語法:

SELECT [DISTINCT | ALL] {* | column1[, column2]...}

FROM {table_1 | (subquery)} [alias]

[, {table_2 | (subquery)} [alias]]...

[WHERE condition]

[CONNECT BY condition [START WITH condition]

[GROUP BY expn] [HAVING expn]

[{ UNION [ALL] | INTERSECT | MINUS } SELECT . . . ]

[ ORDER BY [expn ] [ ASC | DESC]

[ FOR UPDATE [OF [user.]table | view] column ]

[NOWAIT]

詳細語法結構需查閱最新ORACLE 原版《ORACLE8i SQL REFERENCE MANUAL》或《ORACLE9i SQL REFERENCE MANUAL》

1.4、SQL中的單記錄函數

許多資料(包括Oracle 的資料)把Oracle的SQL語句中用到的函數分為單值函數和多值函數,單值函數又分為字符函數和數字函數。下面分別介紹它們。

4.1、單記錄字符函數

函    數           說               明

ASCII 返回對應字符的十進制值

CHR 給出十進制返回字符

CONCAT 拼接兩個字符串,與 || 相同

INITCAT 將字符串的第一個字母變為大寫

INSTR 找出某個字符串的位置 instr

INSTRB 找出某個字符串的位置和字節數

LENGTH 以字符給出字符串的長度

LENGTHB 以字節給出字符串的長度

LOWER 將字符串轉換成小寫

LPAD 使用指定的字符在字符的左邊填充

LTRIM 在左邊裁剪掉指定的字符

RPAD 使用指定的字符在字符的右邊填充

RTRIM 在右邊裁剪掉指定的字符

REPLACE 執行字符串搜索和替換

SUBSTR 取字符串的子串

SUBSTRB 取字符串的子串(以字節)

SOUNDEX 返回一個同音字符串

TRANSLATE 執行字符串搜索和替換

TRIM 裁剪掉前面或后面的字符串

UPPER 將字符串變為大寫

NVL 以一個值來替換空值

 

1、ASCII(<c1>)

<c1>是字符串。返回與指定的字符對應的十進制數。

SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

     A      a ZERO SPACE

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

65     97     48     32

SQL> select ascii('趙') zhao,length('趙') leng from dual;

      ZHAO       LENG

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

     54740          1

2、CHR(<I>[NCHAR])

給出整數,返回對應字符。如:

SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C

--   -

趙 A

3、CONCAT(<c1>,<c2>)

返回字符串c1與字符串c2合並后的值。例如:

SQL> select concat('010-','8801 8159')||'轉23' 趙元傑電話 from dual;

趙元傑電話

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

010-8801 8159轉23

4、INITCAP(<c1>)

返回字符串c1 並第一個字母變為大寫。例如:

SQL> select initcap('simth') upp from dual;

UPP

-----

Simth

5、INSTR(<c1>,<c2>[,<I>[,<j>] ] )

在一個字符串中搜索指定的字符,返回發現指定的字符的位置。

C1: 被搜索的字符串

C2: 希望搜索的字符串

I: 搜索的開始位置,缺省是1

J: 出現的位置,缺省是1。

SQL> SELECT INSTR ('Oracle Training', 'ra', 1, 2) "Instring" FROM DUAL;

Instring

----------

        9

6、INSTRB(<c1>,<c2>[,<I>[,<j>] ] )

除了返回的字節外 ,與INSTR 相同,

7、LENGTH( <c> )

返回字符串 c 的長度。

SQL> l

1 select name,length(name),addr,length(addr),sal,length(to_char(sal))

2* from nchar_tst

SQL> /

NAME LENGTH(NAME) ADDR      LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))

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

趙元傑      3        北京市海淀區         6         99999.99    8

8、LENGTHB( <c> )

以字節返回字符串的字節數。

SQL> select name,lengthb(name),length(name) from nchar_tst;

NAME   LENGTHB(NAME) LENGTH(NAME)

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

趙元傑             6            3

9、LOWER ( <c> )

返回字符串並將所有字符變為小寫。

SQL> select lower('AaBbCcDd') AaBbCcDd from dual;

AABBCCDD

--------

aabbccdd

10、UPPER( <c>)

與 LOWER 相反,將給出字符串變為大寫。如:

SQL> select upper('AaBbCcDd') AaBbCcDd from dual;

AABBCCDD

--------

AABBCCDD

11、RPAD和LPAD(粘貼字符)

RPAD(string,Length[,'set'])

LPAD(string,Length[,'set'])

 

      RPAD在列的右邊粘貼字符;

      LPAD在列的左邊粘貼字符。

例1:

SQL>select   RPAD(City,35,'.'),temperature    from weather;

        RPAD(City,35,'.')            temperature

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

           CLEVELAND......                    85

           LOS ANGELES..                     81

          .........................

        (即不夠35個字符用'.'填滿)

12、LTRIM(左截斷)RTRIM(右截斷) 函數

LTRIM (string [,’set’])

Left TRIM (左截斷)刪去左邊出現的任何set 字符。

RTRIM (string [,’set’])

Right TRIM (右截斷)刪去右邊出現的任何set 字符。

例1:

SELECT RTRIM (‘Mother Theresa, The’, ‘The’) “Example of Right

Trimming” FROM DUAL;

Example of Right

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

Mother Theresa,

13、SUBSTR Substr(string,start[,Count])

取子字符串中函數

對字串(或字段),從start字符 開始,連續取 count 個字符並返回結果,如果沒有指count則一直取到尾。

select phone,substr(phone,1,3) || ‘0’ || substr(phone,4)

from telecommunication where master=’中國電信’;

14、SUBSTRB(string,start[,Count])

對字串(或字段),從start字節 開始,連續取 count 個字節並返回結果,如果沒有指count則一直取到尾。

15、REPLACE (‘string’ [,’string_in’,’string_out’])

String: 希望被替換的字符串或變量。

String_in: 被替換字符串。

String_out: 要替換字符串。

SQL> select replace('Informaix中國公司','Informaix','IBM Informix')

2 IBM數據庫 from dual;

IBM數據庫

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

IBM Informix中國公司

16、SOUNDEX( <c> )

返回一個與給定的字符串讀音相同的字符串(不管拼寫是否一樣)。

SELECT DPL_NAME FROM DENIED_PARTIES_LIST WHERE

SOUNDEX(DPL_NAME) = SOUNDEX(‘Saddam Hussain’) ;

DPL_NAME

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

Al Husseni

Sadda Al Sada.

17、REPLACE (‘string’ [,’string_in’,’string_out’])

String:希望被替換的字符串或變量。

String_in: 被替換字符串。

String_out: 要替換字符串。

SELECT REPLACE (‘Oracle’, ‘Or’, ‘Mir’) “Example “ FROM DUAL;

Example

-------

Miracle

18、TRIM( [<leading>] <trailing> FROM <trim_char> )

TRIM可以使你對給定的字符串進行裁剪(前面,后面或前后)。

 

如果指定 LEADING, Oracle 從trim_char 中裁剪掉前面的字符;

 

如果指定TRAILING, Oracle 從trim_char 中裁剪掉尾面的字符;

 

如果指定兩個都指定或一個都沒有給出,Oracle從trim_char 中裁剪掉前面及尾面的字符;

 

如果不指定 trim_character, 缺省為空格符;

 

如果只指定trim_source, Oracle Oracle從trim_char 中裁剪掉前面及尾面的字符。

 

例子:將下面字符串中的前面和后面的‘0‘字符都去掉:

 

SELECT TRIM (0 FROM 0009872348900) "TRIM Example" FROM DUAL;

 

 

TRIM example

 

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

 

98723489

4.2、單記錄數字函數

函數 說明

Value1 + value2 加

Value1 - value2 減

Value1 * value2 乘

Value1 / value2 除

ABS(value) 絕對值

CEIL(value) 大於或等於value的最小整數

COS(value) 余弦

COSH(value) 反余弦

EXP(value) e的value次冪

FLOOR(value) 小於或等於value的最大整數

LN(value) value的自然對數

LOG(value) value的以10為底的對數

MOD(value,divisor) 求模

NVL(value,substitute) value為空時以substitute代替

POWER(value,exponent) value的exponent次冪

ROUND(value,precision) 按precision 精度4舍5入

SIGN(value) value為正返回1;為負返回-1;為0返回 0.

SIN(value) 余弦

SINH(value) 反余弦

SQRT(value) value 的平方根

TAN(value) 正切

TANH(value) 反正切

TRUNC(value,按precision) 按照precision 截取value

VSIZE(value) 返回value在ORACLE的存儲空間大小

 

1、ABS( <n> )

返回指定值的絕對值。如:

SQL> select abs(100),abs(-100) from dual;

ABS(100) ABS(-100)

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

       100        100

2、ACOS( <n> )

給出反余弦的值。如:

SQL> Select acos(-1) acos from dual;

      ACOS

----------

3.14159265

3、ASIN( <n> )

給出反正弦的值。如:

SQL> select asin(-1) "arc sine" from dual;

arc sine

----------

-1.5707963

4、ATAN ( <N> )

返回一個數字的反正切值。如:

SQL> select atan(-1) "arc tangent" from dual;

arc tangent

-----------

-.78539816

5、CEIL( <n> )

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

SQL> select ceil(3.14159) from dual;

CEIL(3.14159)

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

4

6、COS ( <n> )

返回一個數字余弦值。如:

SQL> select cos(-3.1415926) from   dual;

COS(-3.1415926)

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

-1

7、COSH ( <n> )

返回一個數字雙曲余弦值。如:

SQL> select cosh(20) cosh from dual;

     COSH

----------

242582598

8、EXP ( <n> )

返回一個數字 e 的 n 次方的值。如:

SQL> select exp(2),exp(1) from dual;

EXP(2)      EXP(1)

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

7.3890561 2.71828183

9、FLOOR ( <n> )

對給定的數字取整數,如:

SQL> select floor(123.45),floor(45.56) from dual;

FLOOR(123.45) FLOOR(45.56)

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

45

10、LN( <n> )

返回一個數字的對數值,n 是大於 0 的數字,如:

SQL> select ln(1),ln(2),ln(3) from dual;

     LN(1)      LN(2)      LN(3)

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

         0   .693147181   1.09861229

11、LOG( <n1>, <n2> )

返回一個以n1為底的n2的對數,n1不是0或1的正數。如:

SQL> select log(2,1),log(2,2) from dual;

LOG(2,1)     LOG(2,2)

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

1

12、MOD( <n1>,<n2> )

SQL> Select mod(10,3), mod(10,2), mod(10,4) from dual;

MOD(10,3) MOD(10,2) MOD(10,4)

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

         1          0          2

13、POWER ( <n1>, <n2> )

返回 n1 的 n2 次方值,如:

SQL> select power(2,10),power(3,3) from dual;

POWER(2,10)   POWER(3,3)

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

27

14、ROUND(value,precision)

按照指定的精度進行舍入;

select round(55.5),round(-55.5),trunc(55.5),trunc(-55.5)

from dual;

round(55.5) round(-55.5) trunc(55.5) trunc(-55.5)

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

       56             -56         55         -55

15、SIGN(<n>)

取數字n 的符號,大於0 返回 1;小於0 返回-1; 等於0 返回0。 如:

例:

select sign(123), sign(-100),sign(0) from dual;

sign(123) sign(-100) sign(0)

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

      1           -1         0

16、SIN ( <n> )

返回一個數字的正弦值。如:

SQL> select sin(1.57079) from dual;

SIN(1.57079)

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

        1

17、SINH( <n> )

返回雙曲余弦的值,如:

SQL> select sin(20),sinh(20) from dual;

   SIN(20)   SINH(20)

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

.912945251   242582598

18、SQRT( <n> )

返回 數字 n 的根,如:

SQL> select sqrt(64),sqrt(10) from dual;

SQRT(64)   SQRT(10)

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

         8   3.16227766

19、TAN( <n> )

返回數字 n的正切值,如:

SQL> select tan(20),tan(10) from dual;

TAN(20)       TAN(10)

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

2.23716094 .648360827

20、TANH( <n> )

返回數字 n的雙曲正切值,如:

SQL> select tanh(20),tan(20) from dual;

TANH(20)     TAN(20)

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

         1    2.23716094

21、TRUNC(value,precision)

按照指定的截取一個數。如:

SQL> SELECT TRUNC (124.16666, -2) trunc1, trunc(124.16666,2) from dual;

    TRUNC1 TRUNC(124.16666,2)

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

124.16

4.3、單記錄日期函數

Oracle 用到的日期函是:

   函   數      描      述

ADD_MONTH 在日期date上增加count個月

GREATEST(date1,date2,. . .) 從日期列表中選出最晚的日期

LAST_DAY( date ) 返回日期date 所在月的最后一天

LEAST( date1, date2, . . .) 從日期列表中選出最早的日期

MONTHS_BETWEEN(date2,date1) 給出 Date2 - date1 的月數(可以是小數)

NEXT_DAY( date,’day’) 給出日期date之后下一天的日期,這里的day為星期,如: MONDAY,Tuesday等。

NEW_TIME(date,’this’,’other’) 給出在this 時區=Other時區的日期和時間

ROUND(date,’format’) 未指定format時,如果日期中的時間在中午之前,則將日期中的時間截斷為12 A.M.(午夜,一天的開始),否則進到第二天。時間截斷為12 A.M.(午夜,一天的開始),否則進到第二天。

TRUNC(date,’format’) 未指定format時,將日期截為12 A.M.( 午夜,一天的開始).

 

 

1、ADD_MONTHS( <d>,<I> )

增加月份和減去月份,如:

SQL> select to_char( add_months(to_date('199712','yyyymm'), 1),'yyyymm') add_month

2 from dual;

ADD_MO

------

199801

SQL> select to_char(add_months(to_date('199712','yyyymm'), -1 ),'yyyymm') add_mo

2 from dual;

ADD_MO

------

199711

2、LAST_DAY( date )

返回日期date 所在月的最后一天,如:

SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd')

2 from dual;

TO_CHAR(SY TO_CHAR((S

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

2001.05.18 2001.05.19

3、MONTHS_BETWEEN(date2,date1)

給出 Date2 - date1 的月數(可以是小數);

SQL> select months_between('19-12月-1999','19-3月-2000') mon_betw from dual;

MON_BETW

----------

        -3

SQL> select months_between(to_date('2000.05.20','yyyy.mm.dd'),

2 to_date('2005.05.20','yyyy.mm.dd') ) mon_bet from dual;

   MON_BET

----------

-60

4、NEW_TIME(date,’this’,’other’)

給出在this 時區=Other時區的日期和時間

This和other 是時區,它們可以是下面的值:

時區縮寫 代表的時區

AST/ADT 大西洋標准/日期時間

BST/BDT 白令海標准/日期時間

CST/CDT 中部標准/日期時間

GMT 格林威治時間

HST/HDT 阿拉斯加-夏威夷標准/日期時間

MST/MDT 山區標准/日期時間

NST 新大陸標准時間

PST/PDT 太平洋標准/日期時間

YST/YDT Yukon標准/日期時間

 

SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,

2   to_char(new_time(sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles

3    from dual;

BJ_TIME             LOS_ANGLES

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

2001.05.19 06:25:25 2001.05.19 13:25:25

5、NEXT_DAY( date,’day’)

給出日期date和星期x之后計算下一星期x的日期,這里的day為星期,如: MONDAY,Tuesday等。但在中文環境下,要寫成’星期x’這樣的格式,如:

例:比如今天是5月18日星期五,計算下一個星期五是幾號:

SQL> select next_day('18-5月-2001','星期五') nxt_day from dual;

NXT_DAY

----------

25-5月 -01

6、SYSDATE

用來得到系統的當前日期,如:

SQL> select to_char(sysdate,'dd-mon-yyyy day') from dual;

TO_CHAR(SYSDATE,'DD

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

18-5月 -2001 星期五

7、TRUNC(<date>,[,<fmt>] )

按照 給出的 fmt 的要求將日期截斷。如果 fmt=’mi’ 則表示截斷掉秒保留至分。如:

SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,

2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH                  HHMM

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

2001.05.18 22:00:00 2001.05.18 22:27:00

4.4、單記錄轉換函數

   函   數      描      述

CHARTOROWID 將 字符轉換到 rowid類型

CONVERT 轉換一個字符節到另外一個字符節

HEXTORAW 轉換十六進制到raw 類型

RAWTOHEX 轉換raw 到十六進制

ROWIDTOCHAR 轉換 ROWID到字符

TO_CHAR 轉換日期格式到字符串

TO_DATE 按照指定的格式將字符串轉換到日期型

TO_MULTIBYTE 把單字節字符轉換到多字節

TO_NUMBER 將數字字串轉換到數字

TO_SINGLE_BYTE 轉換多字節到單字節

 

1、CHARTOROWID(<c>)

將字符數據類型轉換為ROWID類型,如:

1* select rowid,rowidtochar(rowid),ename from scott.emp

SQL> /

ROWID                  ROWIDTOCHAR(ROWID)     ENAME

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

AAAFXDAABAAAHVaAAA AAAFXDAABAAAHVaAAA SMITH

AAAFXDAABAAAHVaAAB AAAFXDAABAAAHVaAAB ALLEN

AAAFXDAABAAAHVaAAC AAAFXDAABAAAHVaAAC WARD

2、CONVERT( <c>,<dset>[,<sset>] )

將源字符串sset從一個語言字符集轉換到另一個目的dset字符集。

SELECT CONVERT (‘strutz’, ‘ WE8HP’, ‘ F7DEC ‘) “Conversion”

FROM DUAL;

Conversion

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

Strutz.

3、HEXTORAW( <x> )

將一個十六進制構成的字符串轉化為二進制。如:

Insert into printers( printer_nbr,manufacturer,model,init_string)

Values ( 12,’HP’,’Laserjet’,”HEXTORAW(‘1B45’));

RAWTOHEX( <x> )

將一個二進制構成的字符串轉化為十六進制。如:

select rawtohex ( init_string) hext from printers

where model=LaserJet’ and manufacturer=’HP’;

hext

-----------

1B45

4、ROWIDTOCHAR( <x> )

將ROWID數據類型轉換為字符類型,見 CHARTOROWID。

5、TO_CHAR(date,’format’)

根據format 重新格式日期date的格式。如:

SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

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

2001/05/18 23:05:36

日期格式比較多,詳細內容請參考原版資料。下面給出常用的日期格式代碼:

日期格式代碼表

日期代碼 格式說明 例子

AD 或 BC AD=Anno Domini公元,BC=Before Christ公元前。不帶點的公元或公元前 ‘YYYY AD’=1999 AD

A.D. 或B.C. 帶點的公元或公元前 ‘YYYY A.D.’=1999 A.D.

AM或PM AM= ante meridiem 上午,PM=post meridiem下午。不帶點的上午或下午 ‘HH12AM’=09AM

A.M.或P.M. 帶點的上午或下午 ‘HH12A.M.’=09A.M.

DY 星期幾的縮寫 Mon,Tue,...

DAY 星期幾的全拼 Monday,Tuesday,...

D 一周的星期幾,星期天=1,星期六=7 1,2,3,4,5,6,7

DD 一月的第幾天,1à31 1,2,... 31

DDD 一年的第幾天,1à366 1,2,3,...366

J 公元前的第幾天(從公元前4712起 ?) 2451514,2451515,...

W 一個月的第幾周,1à 5 1,2,3,4,5

WW,IW 一年的第幾周,一年的ISO的第幾周 1,2,3,4,... 52

MM 兩為數的月 01,02,03,...12

MON 月份的縮寫 Jan,Feb,Mar ,...Dec

MONTH 月份的全拼 January,February,...

RM 羅馬數字的月份,I à XII I,II,III,IV,...XII

YYYY,YYY,YY,Y 四位數的年,三位數的年 1999,999,99,9

YEAR 年的全拼 Nineteen Ninety-nine

SYYYY 如果是公元前(BC),年份前負號 -1250

RR 當前年份的后兩位數字 01代表2001年

HH,HH12 12小時制,1à12 1,2,3,...12

HH24 24小時制,0à23 0,1,2,3,...23

MI 一小時中的第幾分,0à59 0,1,2,3...59

SS 一分中的第幾秒,0à59 0,1,2,3,...59

SSSSS 一天中的第幾秒,0à86399 0,1,2,3,...86399

../-;: 標點符號表示法 文字顯示

‘text’ 引號表示法 文字顯示

 

6、TO_DATE(string,’format’)

將一和字串轉換為ORACLE的日期。如:

Insert into demo(demo_key,date_col) Values(1 , to_date(’04-Oct-1999’, ‘DD-Mon-yyyy’) );

7、TO_MULTI_BYTE(<c>)

將字符串中的單字節字符轉換為多字節字符, 如:

8、TO_NUMBER(<c>)

將給出的字符轉換為數字,如:

SELECT TO_NUMBER (‘1947’) “FISCAL_YEAR” FROM DUAL;

FISCAL_YEAR

-----------

1947

9、TO_MULTI_BYTE(<c>)及TO_SINGLE_BYTE

將單字節轉換為多字節或從多字節轉換為單字節。

4.5、其它的單記錄函數

1、BFILENAME( <dir>, <file> )

指定一個外部二進制文件。如:

INSERT INTO file_tbl VALUES (BFILENAME (’lob_dir1’, ’image1.gif’));

 

2、CONVERT (‘x’,’desc_set’ [, ‘source_set’])

將x 字段或變量的源 source 轉換為 desc,如:

select sid,serial#,username,

DECODE(command,

0,’None’,

2,’Insert’,

3,’Select’,

6,’Update’,

7,’Delete’,

8,’Drop’,

‘Other’) cmd

from v$session where type != ‘BACKGROUND’;

關於DECODE 在優化方面的內容在《Oracle8i/9i 高級數據庫管理》中查閱。

3、DUMP( s,[,fmt [, start [, length ] ] ] )

DUMP 函數以fmt 指定的內部數字格式返回一個VARCHAR2類型的值。如:

SQL> col global_name for a30

SQL> col DUMP_STRING for a50

SQL> set lin 200

SQL> select global_name,dump(global_name,1017,8,5) dump_string

2   from global_name;

 

GLOBAL_NAME                    DUMP_STRING

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

ORA816.US.ORACLE.COM Typ=1 Len=20 CharacterSet=ZHS16GBK: U,S,.,O,R

4、EMPTY_BLOB() 和 EMPTY_CLOB() 函數

這兩個函數都是用來對大數據類型字段進行初始化操作的函數,一般有:

BLOB數據類型 --- EMPTY_BLOB()

CLOB數據類型 --- EMPTY_CLOB()

NCLOB數據類型 --- EMPTY_CLOB()

Insert into proposal

( proposal_id, recipient_name,proposal_name,short_description,

proposal_text,budget , cover_letter )

values(2,’BRAD OHMONT’,’REBUILD FENCE’,NULL,

EMPTY_CLOB(),EMPTY_BLOB(),

BFILENAME(‘proposal_dir’,’P2.DOC’) );

5、GREATEST( <exp_list> )

返回一組表達式中的最大值,即比較字符的編碼大小。如:

SQL> select greatest('AA','AB','AC') from dual;

GR

--

AC

SQL> select greatest('啊','安','天') from dual;

GR

--

即 “天”的編碼比“安”和“啊”都大。

6、LEAST ( <exp_list> )

返回一組表達式中的最小值,即比較字符的編碼大小。如:

SQL> select least('啊','安','天') from dual;

LE

--

7、UID 函數

返回標識當前用戶的唯一整數,如:

SQL> show user

USER 為"SYSTEM"

SQL> l

1* select username,user_id from dba_users where user_id=UID

SQL> /

 

USERNAME           USER_ID

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

SYSTEM                     5

8、USER 函數

返回當前用戶的名字,如:

SQL> select user from dual;

USER

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

SYSTEM

9、USERENV( <opt> )

返回當前用戶環境的信息,opt 選項可以是:

ENTRYID 返回當前用戶會話的入口ID

SESSIONID 返回當前用戶會話的ID

TERMINAL 返回當前系統會話的操作系統標識

OSDBA      如果當前用戶有DBA權限,則返回 TRUE

LABLE       返回當前用戶會話的標號

LANGUAGE   返回當前用戶的語言和區域

CLIENT_INFO 為當前用戶會話返回 client-info 域的值,這個值由

               dbms_application_info,set_client_info 過程來設置。

LANG   以ISO 的三個字符表示當前用戶會話所使用的語言。

VSIZE   返回表達式的字節大小。

10、ISDBA 函數

查看當前用戶是否是 DBA ,當SYSDBA 角色有效是才返回 TRUE,如:

SQL> show user

USER is "SYSTEM"

SQL> select userenv('ISDBA') from dual;

USEREN

------

FALSE

SQL> connect sys/sys@ora816

Connected.

SQL> select userenv('ISDBA') from dual;

USEREN

------

FALSE

SQL> connect internal

Connected.

SQL> select userenv('ISDBA') from dual;

USEREN

------

TRUE

11、SESSIONID函數

返回審計會話標識,如:

select userenv(‘SESSIONID’) aud_id from dual;

aud_id

---------

47343

12、ENTRYID 函數

返回審計會話入口標識,當initsid.ora 文件中的 audit_trail=TRUE 時可以用,如:

select userenv(‘ENTRYID’) from dual;

USERENV(‘ENTRYID’)

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

835641

13、INSTANCE函數

返回當前INSTANCE 的標識,如:

SQL> select userenv('INSTANCE') from dual;

USERENV('INSTANCE')

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

           1

14、LANGUAGE函數

返回當前環境的語言,如:

SQL> select userenv('LANGUAGE') from dual;

USERENV('LANGUAGE')

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

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

15、LANG函數

返回當前環境的語言的縮寫,如:

SQL> l

1* select userenv('LANG') from dual

SQL> /

USERENV('LANG')

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

ZHS

16、TERMINAL函數

返回用戶的終端或機器的標識,如:

SQL> select userenv('TERMINAL') from dual;

USERENV('TERMINA

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

ZHAOYUANJIE

17、VSIZE( <x> )

返回 x 的大小(字節)數,如:

SQL> select vsize(user),user from dual;

VSIZE(USER)   USER

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

          6   SYSTEM

4.6、多記錄組函數

1、AVG( [ { DISTINCT | ALL}] )

求平均值,ALL表示對所有求平均值,DISTINCT 只對不 同的求平均值,相同只取一個。

SQL> l

1* select avg(sal) from emp

SQL> /

AVG(SAL)

----------

2073.21429

2、MAX( [ { DISTINCT | ALL}] )

求最大值,ALL表示對所有求最大值,DISTINCT 只對不 同的求最大值,相同只取一個。

SQL> select max(sal) from emp;

MAX(SAL)

----------

      5000

3、MIN( [ { DISTINCT | ALL}] )

求最小值,ALL表示對所有求最小值,DISTINCT 只對不同的求最小值,相同只取一個。

SQL> select min(sal) from emp;

MIN(SAL)

----------

800

4、STDDEV( [ { DISTINCT | ALL}] )

求標准差,ALL表示對所有求標准差,DISTINCT 只對不同的求標准差,相同只取一個。

SQL> select stddev(sal) from emp;

STDDEV(SAL)

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

1182.50322

5、VARIANCE( [ { DISTINCT | ALL}] )

求協方差,ALL表示對所有求協方差,DISTINCT 只對不同的求協方差,相同只取一個。

SQL> select variance(sal) from emp;

VARIANCE(SAL)

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

 

2、SQL 函數效果

2.1、oracle數據庫sql字符串分隔split

select  dbms_lob.substr(regexp_substr('123,456,7890', '[^,]+', 1, 1)) arry1,

       dbms_lob.substr(regexp_substr('123,456,7890', '[^,]+', 1, 2)) arry2,

       dbms_lob.substr(regexp_substr('123,456,7890', '[^,]+', 1, 3)) arry3

  from dual

運行結果:

   ARRY1   ARRY2   ARRY3

1   123      456    7890

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM