oracle函数详解

Oracle 数据库中 SQL 分析的主要优势

Oracle 数据库中分析功能和特性提供以下主要优势:

1. 提高开发人员产能 — 开发人员可以通过更清晰、更简洁的 SQL 代码执行复杂分析。现在可以使用一条 SQL 语句表示复杂任务,编写和维护速度更快、效率更高。
2. 提高查询速度 — 数据库中分析支持的处理优化可大幅提高查询性能。以前需要自联接或复杂过程处理的操作现在可以用原生 SQL 执行。
3. 改善可管理性 — 应用程序共享一个公共的关系环境,而非数据结构不兼容的计算引擎组合,因此可以轻松访问所有数据类型和资源整合视图
4. 学习负担极小 — SQL 分析函数需要学习的新关键字极少,因为其语法利用了众所周知的已有关键字。
5. 基于行业标准的语法 — Oracle 的特性符合 ANSI SQL 标准,受到大量独立软件供应商的支持。

概述

Oracle Database 中内嵌的数据库中分析函数特性可用于回应各种业务问题。开发人员和业务用户可以访问各种分析特性,并将其结果与其他 SQL 查询和分析管道结合,获得更深入的洞察。Oracle 数据库包括以下特性:

  • 排名
  • 窗口化
  • 报表聚合
  • LAG/LEAD
  • FIRST/LAST
  • 逆百分位数
  • 假设性排名和分布
  • 模式匹配
  • 建模
  • 高级聚合
  • 用户定义的函数

ABS

语法:

ABS ( n )

用法:

返回n的绝对值。

参数:

n为数值数据类型,或者可以隐式转化为数值类型的其他数据类型。

例子:

SELECTABS(-12345.6789) result FROM dual;

RESULT

----------

12345.6789

ACOS

语法:

ACOS ( n )

用法:

返回n的反余弦值。n的值必须在-1到1之间;返回值的范围从0到pi。

参数:

n可以为任意数值类型或可以隐式转化成数值的其他类型。如果n是BINARY_FLOAT,则返回值的类型是BINARY_DOUBLE,否则返回值的类型与参数的数据类型相同。

例子:

SELECT ACOS(-1)result FROM dual;

RESULT

----------

3.14159265

ADD_MONTHS

语法:

ADD_MONTHS ( date,integer )

用法:

返回date加上integer个月后的日期。一个月是由会话(session)参数NLS_CALENDAR来定义的。

参数:

date是一个日期时间值或可以隐式转化为DATE的其他值。integer是一个整数或其他可以转化为整数的值。返回值永远是DATE数据类型。如果date是一个月的最后一天,或者得到结果的月份的天数比date所在月份的天数时,返回结果是结果月份的最后一天。

例子:

SELECTTO_CHAR(ADD_MONTHS(TO_DATE(‘2011-01-31‘,‘YYYY-MM-DD‘),1),‘YYYY-MM-DD‘) result FROM dual;

RESULT

----------

2011-02-28

SELECTTO_CHAR(ADD_MONTHS(TO_DATE(‘2011-01-30‘,‘YYYY-MM-DD‘),1),‘YYYY-MM-DD‘) result FROM dual;

RESULT

----------

2011-02-28

SELECTTO_CHAR(ADD_MONTHS(TO_DATE(‘2011-01-27‘,‘YYYY-MM-DD‘),1),‘YYYY-MM-DD‘) result FROM dual;

RESULT

----------

2011-02-27

SELECTTO_CHAR(ADD_MONTHS(TO_DATE(‘2011-01-31‘,‘YYYY-MM-DD‘), 1.9),‘YYYY-MM-DD‘) result FROM dual;

RESULT

----------

2011-02-28

ASCII

语法:

ASCII ( char )

用法:

返回char的第一个字符在数据库字符集中的十进制表示。

参数:

char可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,或者能转化成它们的其他数据类型。

例子:

SELECT ASCII(‘甲骨文‘) result FROM dual;

RESULT

----------

42450

SELECTASCII(‘Oracle‘) result FROM dual;

RESULT

----------

79

ASCIISTR

语法:

ASCIISTR ( char )

用法:

返回字符串char在数据库字符集中的ASCII版本。非ASCII字符将会转化成\XXXX的格式,其中XXXX是UTF-16编码单元。

例子:

SELECT ASCIISTR(‘甲骨文‘) result FROM dual;

RESULT

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

\7532\9AA8\6587

SELECTASCIISTR(‘Oracle‘) result FROM dual;

RESULT

------

Oracle

ASIN

语法:

ASIN ( n )

用法:

返回n的反正弦值。

n必须在-1到1之间。返回值的范围在-pi/2到pi/2

参数:

n可以为任意数值类型或可以隐式转化成数值的其他类型。如果n是BINARY_FLOAT,则返回值的类型是BINARY_DOUBLE,否则返回值的类型与参数的数据类型相同。

例子:

SELECT ASIN(1)result FROM dual;

RESULT

----------

1.57079633

ATAN

语法:

ATAN ( n )

用法:

返回n的反正切值。n的取值没有范围;而返回值的范围在-pi/2到pi/2之间。

参数:

n可以为任意数值类型或可以隐式转化成数值的其他类型。如果n是BINARY_FLOAT,则返回值的类型是BINARY_DOUBLE,否则返回值的类型与参数的数据类型相同。

例子:

SELECT ATAN(1)result FROM dual;

RESULT

----------

.785398163

ATAN2

语法:

ATAN2 ( n1, n2 )

用法:

返回n1与n2的反正切值。等同于ATAN(n1/n2)。

参数:

n可以为任意数值类型或可以隐式转化成数值的其他类型。如果n是BINARY_FLOAT,则返回值的类型是BINARY_DOUBLE,否则返回值的类型与参数的数据类型相同。

例子:

SELECT ATAN2(1,0)result FROM dual;

RESULT

----------

1.57079633

SELECT ATAN2(-.1,0)result FROM dual;

RESULT

----------

-1.5707963

AVG

语法:

AVG ( [DISTINCT|ALL]expr )

用法:

返回expr的平均值。

参数:

expr可以为任意数值类型或可以转化为数值类型的其他类型。返回值的数据类型与expr的数据类型相同。

例子:

SELECT AVG(DISTINCTsal) result FROM scott.emp;

RESULT

----------

2064.58333

SELECT AVG(ALL sal)result FROM scott.emp;

RESULT

----------

2073.21429

BFILENAME

语法:

BFILENAME (‘directory‘, ‘filename‘ )

用法:

返回一个关于directory和filename的BFILE定位器。

参数:

directory是一个DIRECTORY对象。filename是服务器文件系统的一个文件名。

例子:

作为SYSDBA

CREATE DIRECTORYMEDIA_DIR AS ‘/home/oracle‘;

GRANT READ ONDIRECTORY MEDIA_DIR TO TEST;

作为TEST

CREATE TABLEtest_bfile (id NUMBER, bfiles BFILE);

INSERT INTOtest_bfile VALUES (1, BFILENAME(‘MEDIA_DIR‘, ‘uname.txt‘));

COMMIT;

BIN_TO_NUM

语法:

BIN_TO_NUM ( expr [,expr, ...] )

用法:

将字节向量转化成等值的NUMBER。

参数:

每个expr不是0就是1。

例子:

SELECTBIN_TO_NUM(1,1,0,0) result FROM dual;

RESULT

----------

12

BITAND

语法:

BITAND ( expr1,expr2 )

用法:

返回expr1与expr2进行位与运算的结果。

参数:

expr1和expr2都是NUMBER,结果也是NUMBER。如果其中一个参数为NULL,结果也为NULL。

例子:

SELECT BITAND(

BIN_TO_NUM(1,1,0,0),

BIN_TO_NUM(1,0,1,1)) result FROM dual;

RESULT

----------

8

CARDINALITY

语法:

CARDINALITY (nested_table )

用法:

返回内嵌表中元素的个数。

参数:

返回值的类型是NUMBER。如果内嵌表是空的,或者是一个null集合,则返回NULL。

例子:

CREATE OR REPLACETYPE test_nestedtable AS TABLE OF VARCHAR2(20);

/

CREATE TABLE test_nt(id NUMBER, nt test_nestedtable) NESTED TABLE nt STORE AS nt_tab;

INSERT INTO test_nt VALUES(1, test_nestedtable(‘hello‘, ‘nested‘, ‘table‘));

COMMIT;

SELECT id, CARDINALITY(nt) FROM test_nt;

ID CARDINALITY(NT)

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

1               3

CAST

语法:

CAST ( { expr | MULTISET ( subquery ) } AS type_name )

用法:

将一种内置的数据类型或集合类型转化成另一种内置的数据类型或集合类型。CAST不支持LONG,LONG RAW。

参数:

数据类型可以为BINARY_FLOAT,BINARY_DOUBLE,CHAR,VARCHAR2,NUMBER,DATETIME,INTERVAL,RAW,ROWID,UROWID,NCHAR,NVARCHAR2。

例子:

SELECT CAST(TO_DATE(‘2011/10/07‘,‘YYYY/MM/DD‘)AS TIMESTAMP WITH LOCAL TIME ZONE) result FROM dual;

RESULT

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

07-OCT-1112.00.00.000000 AM +08:00

CREATE OR REPLACETYPE cust_address_typ

AS OBJECT

( street_address     VARCHAR2(40)

, postal_code        VARCHAR2(10)

, city               VARCHAR2(30)

, state_province     VARCHAR2(10)

, country_id         CHAR(2)

);

/

CREATE TYPE address_book_tAS TABLE OF cust_address_typ;

/

CREATE TABLEcust_address (

custno            NUMBER,

street_address    VARCHAR2(40),

postal_code       VARCHAR2(10),

city              VARCHAR2(30),

state_province    VARCHAR2(10),

country_id        CHAR(2));

CREATE TABLEcust_short (custno NUMBER, name VARCHAR2(31));

INSERT INTOcust_short VALUES (1, ‘TEST‘);

INSERT INTOcust_address VALUES (1, ‘O STREET‘, ‘9900‘, ‘ORACLE‘, ‘DATABASE‘, ‘CN‘);

COMMIT;

SELECT s.custno,s.name,

CAST(MULTISET(SELECT ca.street_address,ca.postal_code, ca.city, ca.state_province, ca.country_id

FROM cust_address ca

WHERE s.custno = ca.custno)

AS address_book_t)

FROM cust_short s

ORDER BY s.custno;

CUSTNO NAME  RESULT(STREET_ADDRESS,POSTAL_CODE,CITY,STATE_PROVINCE,COUNTRY_ID)

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

1 TEST ADDRESS_BOOK_T(CUST_ADDRESS_TYP(O STREET,9900,ORACLE,DATABASE,CN))

CEIL

语法:

CEIL ( n )

用法:

返回大于或等于n的最小整数。

参数:

n可以为任意数值类型或可以隐式转化成数值的其他类型。返回值的类型与参数的数据类型相同。

例子:

SELECT CEIL(1234.5)result FROM dual;

RESULT

----------

1235

CHARTOROWID

语法:

CHARTOROWID ( char )

用法:

将CHAR,VARCHAR2,NCHAR或NVARCHAR2的数据类型转换成ROWID数据类型。

例子:

select rowid, id fromtest_nt

wherechartorowid(‘AAAVLjAAEAAAADmAAA‘) = rowid;

ROWID                      ID

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

AAAVLjAAEAAAADmAAA          1

CHR

语法:

CHR ( n [ USINGNCHAR_CS ] )

用法:

返回拥有二进制编码n的字符,如果使用NCHAR_CS,就使用数据库字符集。对于单字节字符集,如果n大于256,那么会先进行n mod 256取余数的操作。

参数:

n是一个NUMBER类型的值,或者可以转化成NUMBER的其他类型的值。返回值是一个字符。

例子:

select CHR(42450)from dual;

CHR(42450)

----------

COALESCE

语法:

COALESCE ( { expr [,expr ] ... } )

用法:

返回第一个非NULL的值,至少有两个expr。

参数:

expr的数据类型必须一致

例子:

select COALESCE (null, 123, ‘123‘) from dual;

select COALESCE (null, 123, ‘123‘) from dual

*

Error at line 1

ORA-00932:inconsistent datatypes: expected NUMBER got CHAR

select COALESCE (null, 123, 456) from dual;

COALESCE(NULL,123,456)

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

123

COMPOSE

语法:

COMPOSE ( char )

用法:

将参数的字符串转化成相同字符集下的Unicode字符串。

参数:

char可以为CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB。

例子:

SELECT COMPOSE( ‘a‘|| UNISTR(‘\0308‘) )  FROM DUAL;

COMPOSE(‘A‘||UNISTR(‘\0308‘))

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

ä

CONCAT

语法:

CONCAT ( char1,char2 )

用法:

返回值是char1连接char2,效果与连接符||一样

参数:

char1和char2可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB。

例子:

select CONCAT(‘Hello ‘, ‘Oracle‘) result fromdual;

RESULT

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

Hello Oracle

CONVERT

语法:

CONVERT ( char,dest_char_set [, source_char_set ] )

用法:

将char从字符集source_char_set转成dest_char_set。CHAR和VARCHAR2的返回值是VARCHAR2;NCHAR和NVARCHAR2的返回值是NVARCHAR2;CLOB的返回值是CLOB;NCLOB的返回值是NCLOB。

参数:

char可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB和NCLOB。

例子:

select CONVERT(‘甲骨文‘, ‘US7ASCII‘, ‘ZHT16MSWIN950‘) result from dual;

RESULT

------

???

CORR

语法:

CORR ( expr1, expr2)

用法:

返回一组数值对的相对系数。

例子:

with tmp as

(select ‘a‘ cd, 95n1, 86 n2 from dual

union all

select ‘a‘ cd, 100n1, 95 n2 from dual

union all

select ‘a‘ cd, 58n1, 65 n2 from dual)

select CORR(n1,n2)result from tmp group by cd;

RESULT

----------

.982482592

COS

语法:

COS ( n )

用法:

返回n的余弦值。

参数:

n可以为任意数值类型或可以转化成数值的其他类型。如果n是BINARY_FLOAT,那么返回值是BINARY_DOUBLE;否则返回值类型与参数类型一样。

例子:

SQL> SELECT COS(180* 3.14159265359 / 180) result FROM DUAL;

RESULT

----------

-1

COUNT

语法:

COUNT ( { * } | { [DISTINCT | ALL ] expr } )

语法:

返回查询结果的行数。如果指定了expr,将返回expr不为NULL的行数。DISTINCT会排除重复的行;ALL包含重复的行。指定‘*’时,会返回所有的行,包括重复的和NULL的行。COUNT永远不会返回NULL。

例子:

SQL> SELECTCOUNT(*) FROM scott.emp;

COUNT(*)

----------

14

CURRENT_DATE

语法:

CURRENT_DATE

用法:

返回会话时区的当前日期时间(使用Gregorian日历)。

例子:

SQL> ALTERSESSION SET NLS_DATE_FORMAT =‘YYYY/MM/DD HH24:MI:SS‘;

Session altered.

SQL> SELECTSESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE      CURRENT_DATE

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

+08:00               2011/10/10 15:14:18

SQL> ALTERSESSION SET TIME_ZONE = ‘0:0‘;

Session altered.

SQL> SELECTSESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE      CURRENT_DATE

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

+00:00               2011/10/10 07:14:43

CURRENT_TIMESTAMP

语法:

CURRENT_TIMESTAMP (precision )

用法:

返回会话时区的当前日期和时间,包括小数秒。返回值类型是TIMESTAMP WITH TIME ZONE。如果没有指定precision,默认为6。LOCALTIMESTAMP和CURRENT_TIMESTAMP之间的区别是LOCALTIMESTAMP返回一个TIMESTAMP类型的值,而CURRENT_TIMESTAMP返回一个TIMESTAMP WITH TIME ZONE类型的值。

例子:

SQL> SELECTTO_CHAR(SESSIONTIMEZONE) result FROM DUAL

2 UNION

3 SELECT TO_CHAR(CURRENT_TIMESTAMP) FROM DUAL

4 UNION

5  SELECTTO_CHAR(LOCALTIMESTAMP) FROM DUAL;

RESULT

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

+08:00

10-OCT-1104.07.39.860798 PM

10-OCT-1104.07.39.860798 PM +08:00

DBTIMEZONE

语法:

DBTIMEZONE

用法:

返回数据库的时区,格式为‘[+|-]TZH:TZM’或者时区名。

例子:

SQL> SELECT DBTIMEZONEFROM DUAL;

DBTIME

------

+00:00

DECODE

语法:

DECODE ( expr, {search, result [, ...] } [, default] )

用法:

DECODE比较每个expr的值,如果expr等于其中一个search,那么返回相应的result。如果没有匹配的值,返回default。如果没有default,返回NULL。在DECODE中,Oracle认为两个NULL是匹配的,所以如果expr是NULL,就会返回第一个为NULL的search的相应的result。DECODE函数中,包括expr,search,result和default,一共可以有255个组件。

参数:

参数必须是数值或字符类型。

例子:

SQL> SELECTENAME, DECODE(SIGN(SAL-4000),1,‘RICH‘,0,‘MIDDLE‘,‘LOW‘) result

2  FROMSCOTT.EMP;

ENAME      RESULT

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

SMITH      LOW

ALLEN      LOW

WARD       LOW

JONES      LOW

MARTIN     LOW

BLAKE      LOW

CLARK      LOW

SCOTT      LOW

KING       RICH

TURNER     LOW

ADAMS      LOW

ENAME      RESULT

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

JAMES      LOW

FORD       LOW

MILLER     LOW

DEREF

语法:

DEREF ( expr )

用法:

返回参数expr的对象引用,expr必须返回一个对象的REF。如果在查询中没有使用这个函数,Oracle会返回该REF的对象ID。

例子:

SQL> CREATE TYPEtest_ref_typ_new AS OBJECT

2  (idNUMBER, name VARCHAR2(20));

3  /

Type created.

SQL> CREATE TABLEtest_ref OF test_ref_typ_new;

Table created.

SQL> CREATE TABLEtest (test_id NUMBER, tr REF test_ref_typ_new SCOPE IS test_ref);

Table created.

SQL> INSERT INTOtest_ref VALUES (1, ‘TEST‘);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> INSERT INTOtest select 101, REF(a) FROM test_ref a;

1 row created.

SQL> commit;

Commit complete.

SQL> SELECT trFROM test;

TR

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

0000220208AEEEFD47B1A256F7E040E10A4A0B0F89AEEEFD47B1A156F7E040E10A4A0B0F89

SQL> SELECTDEREF(tr) FROM test;

DEREF(TR)(ID, NAME)

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

TEST_REF_TYP_NEW(1,‘TEST‘)

DUMP

语法:

DUMP ( expr [,return_fmt [, start_position [, length ] ] ] )

用法:

返回expr的数据类型编码,字节长度和内部表示。它总是以数据库字符集来返回结果的。return_fmt有以下类型

8表示8进制

10表示10进制

16表示16进制

17表示如果能解析成可打印的字符则返回字符,否则返回16进制码。

默认地,返回值不包含字符集的信息。要显示字符集信息,在上面代码的基础上加上1000。

参数:

start_position表示开始位置;length表示要解析的长度。

例子:

SQL> SELECTDUMP(‘abc‘, 1016) result FROM DUAL;

RESULT

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

Typ=96 Len=3 CharacterSet=ZHT16MSWIN950: 61,62,63

SQL> SELECTDUMP(‘abc‘, 17) result FROM DUAL;

RESULT

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

Typ=96 Len=3: a,b,c

SQL> SELECTDUMP(‘abc‘, 8, 2, 1) result FROM DUAL;

RESULT

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

Typ=96 Len=3: 142

SQL> SELECT DUMP(‘abc‘,9,2,1)result FROM DUAL;

RESULT

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

Typ=96 Len=3: 98

SQL> SELECTDUMP(‘abc‘,10,2,1) result FROM DUAL;

RESULT

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

Typ=96 Len=3: 98

SQL> SELECTDUMP(‘abc‘,16,2,1) result FROM DUAL;

RESULT

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

Typ=96 Len=3: 62

EXP

语法:

EXP ( n )

用法:

返回自然对数e的n次方。

例子:

SQL> SELECTEXP(1) result1, EXP(2) result2 FROM DUAL;

RESULT1   RESULT2

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

2.71828183  7.3890561

EXTRACT (datetime)

语法:

EXTRACT ( { YEAR |MONTH | DAY | HOUR | MINUTE | SECOND | TIMEZONE_HOUR | TIMEZONE_MINUTE |TIMEZONE_REGION | TIMEZONE_ABBR } FROM expr )

用法:

返回日期或间隔的特定部分的值。如果是YEAR或MONTH,expr必须是DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH;如果是DAY,expr必须是DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL DAY TO SECOND;如果是HOUR,MINUTE或SECOND,expr必须是TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL DAY TO SECOND;如果是TIMEZONE_HOUR,TIMEZONE_MINUTE,TIMEZONE_ABBR,TIMEZONE_REGION或TIMEZONE_OFFSET,expr必须是TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE。

EXTRACT处理DATE时,使用ANSI DATE,不包含HOUR,MINUTE,SECOND。

例子:

SQL> SELECTEXTRACT(YEAR FROM SYSDATE) result FROM DUAL;

RESULT

----------

2011

SQL> SELECTEXTRACT(MONTH FROM  SYSDATE) result FROMDUAL;

RESULT

----------

10

SQL> SELECTEXTRACT(DAY FROM SYSDATE) result FROM DUAL;

RESULT

----------

11

SQL> SELECTEXTRACT(HOUR FROM SYSTIMESTAMP) result FROM DUAL;

RESULT

----------

4

SQL> SELECT EXTRACT(TIMEZONE_HOURFROM SYSTIMESTAMP) result FROM DUAL;

RESULT

----------

8

SQL> SELECTEXTRACT(TIMEZONE_OFFSET FROM SYSTIMESTAMP) FROM DUAL;

EXTRACT(TIMEZONE_OFFSETFROMSYSTIMESTAMP)

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

+00000000008:00:00.000000000

SQL> SELECTEXTRACT(TIMEZONE_MINUTE FROM SYSTIMESTAMP) result FROM DUAL;

RESULT

----------

0

SQL> SELECTEXTRACT(YEAR FROM INTERVAL ‘50‘ MONTH) result FROM DUAL;

RESULT

----------

4

SQL> SELECTEXTRACT(SECOND FROM INTERVAL ‘12 12:34:56‘ DAY TO SECOND) result FROM DUAL;

RESULT

----------

56

FLOOR

语法:

FLOOR ( n )

用法:

返回小于或等于n的最大整数。

参数:

n可以为任意数值类型或可以隐式转化成数值的其他类型。返回值的类型与参数的数据类型相同。

例子:

SQL> SELECTFLOOR(1234.5) result FROM dual;

RESULT

----------

1234

FROM_TZ

语法:

FROM_TZ (timestamp_value, time_zone_value )

用法:

将一个TIMESTAMP值和一个时区转化为一个TIMESTAMP WITH TIME ZONE值。

参数:

time_zone_value是一个格式为‘TZH:TZM’的字符串或能返回一个TZR的字符串。

例子:

SQL> SELECTFROM_TZ(TIMESTAMP ‘2011-10-11 12:22:00‘, ‘02:00‘) result FROM DUAL;

RESULT

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

11-OCT-1112.22.00.000000000 PM +02:00

GREATEST

语法:

GREATEST ( { expr [,expr ... ] } )

用法:

返回一个或多个表达式中的最大值。返回值的类型由第一个expr决定。在比较前,将其余的expr转化成第一个expr的类型再进行比较。默认地,比较是使用nonpadded语义的、二进制的。可以通过NLS_COMP和NLS_SORT参数来改变默认行为。

例子:

SQL> SELECTGREATEST(‘HARRY‘, ‘HARRIOT‘, ‘HAROLD‘) result FROM DUAL;

RESUL

-----

HARRY

GROUPING

语法:

GROUPING ( expr )

用法:

GROUPING可以将超聚合行从常规分组行中区分出来。GROUP BY的扩展ROLLUP和CUBE会产生超聚合行,使用GROUPING可以将其区分出来。

参数:

expr必须是GROUP BY中的表达。如果expr在行中的值为NULL,则返回1,否则返回0。

例子:

SQL> SELECT

2 DECODE(GROUPING(d.dname), 1, ‘ALL DEPARTMENTS‘, d.dname) department,

3 DECODE(GROUPING(e.job), 1, ‘ALL JOBS‘, e.job) job,

4 COUNT(*) "TOTAL EMPLOYEES",

5 AVG(sal) * 12 "AVARAGE SALARY"

6  FROMscott.emp e, scott.dept d

7 WHERE e.deptno=d.deptno

8 GROUP BY ROLLUP (d.dname, e.job)

9 ORDER BY d.dname, e.job;

DEPARTMENT      JOB      TOTAL EMPLOYEES AVARAGE SALARY

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

ACCOUNTING      CLERK                   1          15600

ACCOUNTING      MANAGER                 1          29400

ACCOUNTING      PRESIDENT               1          60000

ACCOUNTING      ALL JOBS                3          35000

RESEARCH        ANALYST                 2          36000

RESEARCH        CLERK                   2          11400

RESEARCH        MANAGER                 1          35700

RESEARCH        ALL JOBS                5          26100

SALES           CLERK                   1          11400

SALES           MANAGER                 1          34200

SALES           SALESMAN                4          16800

SALES           ALL JOBS                6          18800

ALL DEPARTMENTS ALLJOBS               14     24878.5714

GROUPING_ID

语法:

GROUPING_ID ( expr )

用法:

返回一行中相关GROUPING字节向量的数值。GROUPING_ID只有在GROUP BY ROLLUP或CUBE中,并且和GROUPING函数一起使用。

例子:

SQL> SELECTdeptno, job, SUM(sal) "Total Salary",

2 GROUPING(deptno) gd,

3 GROUPING(job) gj,

4 GROUPING_ID(deptno, job) gdj,

5 GROUPING_ID(job, deptno) gjd

6  FROMscott.emp

7 GROUP BY CUBE(deptno,job)

8 ORDER BY deptno,job,"Total Salary",gd;

DEPTNO JOB       Total Salary  GD  GJGDJ GJD

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

10 CLERK             1300   0  0   0   0

10 MANAGER           2450   0  0   0   0

10 PRESIDENT         5000  0   0   0   0

10                   8750   0  1   1   2

20 ANALYST           6000   0  0   0   0

20 CLERK             1900   0  0   0   0

20 MANAGER           2975   0  0   0   0

20                  10875   0  1   1   2

30 CLERK              950   0  0   0   0

30 MANAGER           2850   0  0   0   0

30 SALESMAN          5600  0   0   0   0

30                   9400   0  1   1   2

ANALYST           6000   1  0   2   1

CLERK             4150   1  0   2   1

MANAGER           8275   1  0   2   1

PRESIDENT         5000  1   0   2   1

SALESMAN          5600  1   0   2   1

29025   1  1   3   3

HEXTORAW

语法:

HEXTORAW ( char )

用法:

将包含16进制数字的char转化为RAW值。

参数:

char可以是CHAR,VARCHAR2,NCHAR或NVARCHAR2。不直接支持CLOB,但传进来的CLOB会先进行隐式转化。

例子:

SQL> SELECTUTL_RAW.CAST_TO_VARCHAR2(HEXTORAW(‘4F5241434C45‘)) result

2  FROMDUAL;

RESULT

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

ORACLE

INITCAP

语法:

INITCAP ( char )

用法:

将char转化成每个单词首字母大写,其他字母小写的形式。单词是由空格或其他非字母数字字符来间隔。

参数:

char可以为CHAR,VARCHAR2,NCHAR或NVARCHAR2,返回值类型与char相同。

例子:

SQL> SELECTINITCAP(‘ORACLE DATABASE‘) reslt FROM DUAL;

RESLT

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

Oracle Database

SQL> SELECT INITCAP(‘Oracledatabase‘) reslt FROM DUAL;

RESLT

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

Oracle Database

INSTR

语法:

INSTR ( string,substring [, position [, occurrence ] ] )

用法:

在string中,从position开始搜索substring,返回第occurrence次匹配的位置。如果没找到,返回0。position和occurrence的默认值是1。当position为负数时,表示从string的后面开始向前搜索。

例子:

SQL> SELECTINSTR(‘12345678901234567890‘, ‘0‘) result FROM DUAL;

RESULT

----------

10

SQL> SELECTINSTR(‘12345678901234567890‘, ‘0‘, 11) result

2  FROMDUAL;

RESULT

----------

20

SQL> SELECT INSTR(‘12345678901234567890‘,‘0‘, 2, 2) result

2  FROMDUAL;

RESULT

----------

20

SQL> SELECTINSTR(‘12345678901234567890‘, ‘0‘, 11, 2) result

2  FROMDUAL;

RESULT

----------

0

SQL> SELECTINSTR(‘12345678901234567890‘, ‘0‘, -1) result

2  FROMDUAL;

RESULT

----------

20

SQL> SELECTINSTR(‘12345678901234567890‘, ‘0‘, -1, 2) result

2  FROMDUAL;

RESULT

----------

10

LAST_DAY

语法:

LAST_DAY ( date )

用法:

返回date所在月份的最后一天。

例子:

SQL> SELECT LAST_DAY(SYSDATE)result FROM DUAL;

RESULT

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

31-OCT-11

LEAST

语法:

LEAST ( { expr [,expr ... ] } )

用法:

返回一个或多个表达式中的最小值。返回值的类型由第一个expr决定。在比较前,将其余的expr转化成第一个expr的类型再进行比较。默认地,比较是使用nonpadded语义的、二进制的。可以通过NLS_COMP和NLS_SORT参数来改变默认行为。

例子:

SQL> SELECT LEAST(‘HARRY‘,‘HARRIOT‘, ‘HAROLD‘) result FROM DUAL;

RESULT

------

HAROLD

LENGTH

语法:

LENGTH ( char )

用法:

返回字符串char的长度。

例子:

SQL> SELECTLENGTH(‘ORACLE‘) result FROM DUAL;

RESULT

----------

6

LN

语法:

LN ( n )

用法:

返回n的自然对数。

参数:

n必须大于0。

例子:

SQL> SELECTLN(10) result FROM DUAL;

RESULT

----------

2.30258509

SQL> SELECT LN(0)result FROM DUAL;

SELECT LN(0) resultFROM DUAL

*

ERROR at line 1:

ORA-01428: argument‘0‘ is out of range

LOCALTIMESTAMP

语法:

LOCALTIMESTAMP ( timestamp_pecision)

用法:

以会话时区返回当前日期时间。它与CURRENT_TIMESTAMP的区别是,LOCALTIMESTAMP返回类型为TIMESTAMP,CURRENT_TIEMSTAMP返回类型为TIMESTAMP WITH TIME ZONE。

参数:

timestamp_pecision指定小数秒,默认为6。

例子:

SQL> SELECTLOCALTIMESTAMP FROM DUAL;

LOCALTIMESTAMP

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

12-OCT-1102.37.38.969074 PM

SQL> SELECTLOCALTIMESTAMP(0) FROM DUAL;

LOCALTIMESTAMP(0)

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

12-OCT-11 02.38.03PM

SQL> SELECTLOCALTIMESTAMP(9) FROM DUAL;

LOCALTIMESTAMP(9)

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

12-OCT-1102.38.18.770422000 PM

SQL> SELECTLOCALTIMESTAMP(10) FROM DUAL;

SELECTLOCALTIMESTAMP(10) FROM DUAL

*

ERROR at line 1:

ORA-30088: datetime/intervalprecision is out of range

LOG

语法:

LOG ( n1, n2 )

用法:

返回以n1为底的n2的对数。

参数:

底n1为任意正数,除了0和1。n2可以为任意正数。

例子:

SQL> SELECTLOG(10,100) result FROM DUAL;

RESULT

----------

2

LOWER

语法:

LOWER ( char )

用法:

返回字符串的小写形式。

例子:

SQL> SELECT LOWER(‘ORACLE‘)result FROM DUAL;

RESULT

------

oracle

LPAD

语法:

LPAD ( expr1, n [,expr2 ] )

用法:

返回长度为n的expr1字符串。如果expr1的长度小于n,则用expr2左填充expr1到长度n为止;expr2默认为一个空格符。如果expr1的长度大于n,截取expr1前n个字符返回。

例子:

SQL> SELECTLPAD(‘ORACLE‘,10) result FROM DUAL;

RESULT

----------

ORACLE

SQL> SELECTLPAD(‘ORACLE‘,10,‘-‘) result FROM DUAL;

RESULT

----------

----ORACLE

SQL> SELECTLPAD(‘ORACLE‘,4) result FROM DUAL;

RESU

----

ORAC

LTRIM

语法:

LTRIM ( char [, set] )

用法:

删除char从左边开始的包含在set中的字符,直到遇到第一个不再set中的字符。set默认是空格符。

例子:

SQL> SELECTLTRIM(‘<===>ORACLE<===>‘, ‘<>=‘) result FROM DUAL;

RESULT

-----------

ORACLE<===>

SQL> SELECTLTRIM(‘   ORACLE   ‘) result FROM DUAL;

RESULT

---------

ORACLE

MAX

语法

MAX ( expr )

用法:

聚合函数,返回所有行中expr的最大值。

例子:

SQL> SELECTMAX(sal) FROM scott.emp;

MAX(SAL)

----------

5000

MEDIAN

语法:

MEDIAN ( expr )

用法:

聚合函数,返回所有行中expr的中位数。

参数:

expr只能是数值类型或日期时间类型。

例子:

SQL> SELECTMEDIAN(sal) FROM scott.emp;

MEDIAN(SAL)

-----------

1550

SQL> SELECTMEDIAN(ename) FROM scott.emp;

SELECT MEDIAN(ename)FROM scott.emp

*

ERROR at line 1:

ORA-30495: Theargument should be of numeric or date/datetime type.

MIN

语法

MIN ( expr )

用法:

聚合函数,返回所有行中expr的最小值。

例子:

SQL> SELECT MIN(sal)FROM scott.emp;

MIN(SAL)

----------

800

MOD

语法:

MOD ( n2, n1 )

用法:

返回n2除以n1后的余数。如果n1为0,则返回n2。

注意:MOD的计算方式不用于数学上的经典模式n2 - n1 *FLOOR(n2/n1)。网上找到的MOD的计算方式为:DECODE(SIGN(n2), -1,‘-‘) || MOD(ABS(n2), ABS(n1)),余数的符号由被除数n2决定。另外,Oracle另一个关于余数的函数REMAINDER的计算方式为n2 - n1 * ROUND(n2/n1)。所以要注意使用。

例子:

SQL> SELECTMOD(11,4), MOD(11,-4),

2 MOD(-11,4),MOD(-11,-4) FROM DUAL;

MOD(11,4) MOD(11,-4) MOD(-11,4) MOD(-11,-4)

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

3          3         -3          -3

MONTHS_BETWEEN

语法:

MONTHS_BETWEEN ( date1,date2 )

用法:

返回date1和date2之间的月份数。如果date1比date2晚,结果为正数;如果date1比date2早,结果为负数。如果date1和date2是该月中的相同日期,或者是该月中的最后一天,那么结果是整数,否则结果具有小数部分。

例子:

SQL> SELECTMONTHS_BETWEEN(

2 TO_DATE(‘20111001‘,‘YYYYMMDD‘),

3 TO_DATE(‘20111015‘,‘YYYYMMDD‘)) result FROM DUAL;

RESULT

----------

-.4516129

SQL> SELECTMONTHS_BETWEEN(

2 TO_DATE(‘20111003‘,‘YYYYMMDD‘),

3 TO_DATE(‘20111103‘,‘YYYYMMDD‘)) result FROM DUAL;

RESULT

----------

-1

SQL> SELECTMONTHS_BETWEEN(

2 TO_DATE(‘20110331‘,‘YYYYMMDD‘),

3 TO_DATE(‘20110228‘,‘YYYYMMDD‘)) result FROM DUAL;

RESULT

----------

1

NANVL

语法:

NANVL ( n2, n1 )

用法:

该函数只对BINARY_FLOAT和BINARY_DOUBLE起作用。如果n2为NaN(不是数值),返回n1;否则返回n2。

例子:

CREATE TABLEfloat_point_demo

(dec_num NUMBER(10,2), bin_doubleBINARY_DOUBLE, bin_float BINARY_FLOAT);

INSERT INTOfloat_point_demo

VALUES (0,‘NaN‘,‘NaN‘);

SQL> SELECT *

2   FROM float_point_demo;

DEC_NUM BIN_DOUBLE  BIN_FLOAT

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

0       Nan        Nan

SQL> SELECTbin_float, NANVL(bin_float,0)

2  FROMfloat_point_demo;

BIN_FLOAT NANVL(BIN_FLOAT,0)

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

Nan                  0

NEXT_DAY

语法:

NEXT_DAY ( date,char )

用法:

返回date之后的第一个由char表示的星期几。返回值类型是DATE。

例子:

SQL> SELECTNEXT_DAY(SYSDATE, ‘SUNDAY‘) result FROM DUAL;

RESULT

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

16-OCT-11

NULLIF

语法:

NULLIF ( expr1,expr2 )

用法:

比较expr1和expr2,如果相等,返回NULL,否则返回expr1。expr1不能是NULL的字面量。

例子:

SQL> SELECTNULLIF(1, 4/2) result FROM DUAL;

RESULT

----------

1

SQL> SELECTNVL(NULLIF(‘ORACLE‘, ‘ORA‘ || ‘CLE‘), ‘They are the same.‘) result

2  FROMDUAL;

RESULT

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

They are the same.

SQL> SELECTNULLIF(NULL, ‘ORACLE‘) result FROM DUAL;

SELECT NULLIF(NULL,‘ORACLE‘) result FROM DUAL

*

ERROR at line 1:

ORA-00932:inconsistent datatypes: expected - got CHAR

SQL> SELECTNULLIF(NULL, 100) result FROM DUAL;

SELECT NULLIF(NULL,100) result FROM DUAL

*

ERROR at line 1:

ORA-00932:inconsistent datatypes: expected - got CHAR

NUMTODSINTERVAL

语法:

NUMTODSINTERVAL ( n,‘interval_unit‘ )

用法:

将数值n转化为INTERVAL DAY TO SECOND类型。

参数:

interval_unit必须为DAY,HOUR,MINUTE或SECOND。

例子:

SQL> SELECTNUMTODSINTERVAL(100, ‘DAY‘) result FROM DUAL;

RESULT

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

+00000010000:00:00.000000000

SQL> SELECTNUMTODSINTERVAL(123.45, ‘hour‘) result FROM DUAL;

RESULT

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

+000000005 03:27:00.000000000

SQL> SELECTNUMTODSINTERVAL(12345.6789, ‘minute‘) result FROM DUAL;

RESULT

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

+00000000813:45:40.734000000

SQL> SELECTNUMTODSINTERVAL(12345.6789, ‘SECOND‘) result FROM DUAL;

RESULT

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

+00000000003:25:45.678900000

NUMTOYMINTERVAL

语法:

NUMTOYMINTERVAL ( n,‘interval_unit‘ )

用法:

将数值n转化为INTERVAL YEAR TO MONTH类型。

参数:

interval_unit必须为YEAR或MONTH。

例子:

SQL> SELECTNUMTOYMINTERVAL(12345.6789, ‘YEAR‘) result FROM DUAL;

RESULT

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

+000012345-08

SQL> SELECTNUMTOYMINTERVAL(12345.6789, ‘MONTH‘) result FROM DUAL;

RESULT

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

+000001028-10

NVL

语法:

NVL ( expr1, expr2 )

用法:

如果expr1为NULL,返回expr2,否则返回expr1。

参数:

如果expr1和expr2的数据类型不同时,Oracle将进行隐式转化。如果不能转化,Oracle会返回一个错误。

例子:

SQL> SELECTNVL(NULL, ‘IS NULL‘) result FROM DUAL;

RESULT

-------

IS NULL

SQL> SELECTNVL(123, ‘ORACLE‘) result FROM DUAL;

SELECT NVL(123,‘ORACLE‘) result FROM DUAL

*

ERROR at line 1:

ORA-01722: invalidnumber

NVL2

语法:

NVL2 ( expr1, expr2,expr3 )

用法:

如果expr1不为null,则返回expr2,否则返回expr3。

参数:

expr1可以为任意数据类型;而expr2和expr3,除了LONG,可以为任意数据类型。如果expr2和expr3的数据类型不同,Oracle则会隐式地将其中一种专为另一种数据类型。如果它们不能转化,会报错。如select nvl2(null, 123, ‘abc‘) from dual;会报错ORA-01722 invalid number,因为abc不能转化为数值。如果expr2是字符或数值类型,则根据以下规则进行隐式转化:1. 如果expr2是字符类型,Oracle将expr3转化成expr2的数据类型,除非expr3是null。  2. 如果expr2是数值类型,Oracle会根据数值优先级来进行转化。其他情况根据隐式类型转化表进行转化。

注:数值优先级: BINARY_DOUBLE > BINARY_FLOAT > NUMBER

例子:

SELECT NVL2(NULL,‘NOT NULL‘, ‘NULL‘) result FROM dual;

RESULT

------

NULL

POWER

语法:

POWER ( n2, n1 )

用法:

返回n2的n1次方。n2和n1可以是任意数值,但当n2为负数时,n1必须是整数。

例子:

SQL> SELECTPOWER(2, 32) result FROM DUAL;

RESULT

----------

4294967296

SQL> SELECTPOWER(10, 2.5) result FROM DUAL;

RESULT

----------

316.227766

SQL> SELECTPOWER(-10, -2) result FROM DUAL;

RESULT

----------

.01

SQL> SELECT POWER(-10,3.3) result FROM DUAL;

SELECT POWER(-10,3.3) result FROM DUAL

*

ERROR at line 1:

ORA-01428: argument‘-10‘ is out of range

RAWTOHEX

语法:

RAWTOHEX ( raw )

用法:

将raw转化成16进制表示的字符串。

例子:

SQL> SELECTRAWTOHEX(HEXTORAW(‘3D3E3F‘)) result FROM DUAL;

RESULT

------

3D3E3F

REGEXP_COUNT

语法:

REGEXP_COUNT (source_char, pattern [, position [, match_param]] )

用法:

以正则表达式搜索并返回模式pattern在source_char中出现的次数。

参数:

pattern最多可以有512字节,如果其数据类型与source_char不同,Oracle会将pattern转化为source_char的数据类型。REGEXP_COUNT会忽略pattern中的子表达式的括号,如pattern‘(123(45))‘等于‘12345‘。position表示从source_char的第几位开始搜索,默认为1。match_param可以改变匹配行为,如i表示不区分大小写;c表示区分大小写;n表示‘.‘可以匹配换行符;m可以将source_char作为多行处理;x表示忽略空格符。如果指定了矛盾的两个值,如‘ic‘,Oracle会取后一个值。如果指定其他不在此范围的值,Oracle会报错。如果忽略match_param,默认的大小写模式由NLS_SORT参数决定;‘.‘不能匹配换行符;source_char是单行模式。

例子:

SQL> SELECTREGEXP_COUNT(‘ORACLE DATABASE‘, ‘[AEIOU]‘) result FROM DUAL

RESULT

----------

7

SQL> SELECTREGEXP_COUNT(‘ORACLE DATABASE‘, ‘[aeiou]‘, 1, ‘ic‘) result

2  FROMDUAL;

RESULT

----------

0

SQL> SELECTREGEXP_COUNT(‘ORACLE DATABASE‘, ‘[aeiou]‘, 1, ‘icu‘) result

2  FROMDUAL;

SELECTREGEXP_COUNT(‘ORACLE DATABASE‘, ‘[aeiou]‘, 1, ‘icu‘) result

*

ERROR at line 1:

ORA-01760: illegalargument for function

REGEXP_INSTR

语法:

REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_opt [, match_param [,subexpr ] ] ] ] ] )

用法:

以正则表达式搜索,返回匹配pattern的位置,可能是匹配子字符串的开始或结束位置,由参数return_option决定。如果没有匹配,返回0。

参数:

相同的参数可以参考REGEXP_COUNT。occurrence表示搜索匹配的第几次,如果大于1,则从第一次匹配后的第一字符开始搜索第二次匹配。这个行为与INSTR不同,INSTR是从第一次匹配的第二个字符开始搜索第二次匹配。return_option默认为0,表示返回匹配的第一个字符的位置,即匹配的开头;如果为1,则返回匹配之后的位置,即匹配的结尾。subexpr的范围是从0到9,表示匹配的子模式,如‘0123(((abc)(de)f)ghi)45(678)‘中,有5个子模式,"abcdefghi","abcdef","abc","de","678"。如果subexpr为0,则返回匹配整个模式的位置,如果大于0,则返回匹配整个模式中相应的子模式的位置。如果subexpr为NULL,则返回NULL。默认值为0。

例子:

SQL> SELECTREGEXP_INSTR(‘BOBOB‘,‘BOB‘,1,2) FROM DUAL;

REGEXP_INSTR(‘BOBOB‘,‘BOB‘,1,2)

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

0

SQL> SELECTINSTR(‘BOBOB‘,‘BOB‘,1,2) FROM DUAL;

INSTR(‘BOBOB‘,‘BOB‘,1,2)

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

3

SQL> SELECTREGEXP_INSTR(‘0123456789‘,‘123‘,1,1,0) result FROM DUAL;

RESULT

----------

2

SQL> SELECTREGEXP_INSTR(‘0123456789‘,‘123‘,1,1,1) result FROM DUAL;

RESULT

----------

5

SQL> SELECTREGEXP_INSTR(‘0123456789‘,‘[[:digit:]]+(678)‘,1,1,0,‘i‘,1) from dual;

REGEXP_INSTR(‘0123456789‘,‘[[:DIGIT:]]+(678)‘,1,1,0,‘I‘,1)

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

7

REGEXP_LIKE

语法:

REGEXP_LIKE (source_char, pattern [, match_param] )

用法:

以正则表达式搜索模式pattern,找到则返回true,否则返回false。

参数:

参考REGEXP_COUNT和REGEXP_INSTR。

例子:

SQL> SELECT‘FOUND‘ result FROM DUAL

2 WHERE REGEXP_LIKE(‘0123456789‘,‘[[:digit:]]+(678)‘);

RESUL

-----

FOUND

REGEXP_REPLACE

语法:

REGEXP_REPLACE (source_char, pattern [, replace_string [, position [, occurrence [, match_param] ] ] ] )

用法:

以正则表达式搜索并替换pattern为replace_string。

参数:

replace_string可以包含子模式的引用\n,n从1到9。如果没有提供replace_string,则删除source_char中匹配到的pattern。其他参数参考REGEXP_COUNT和REGEXP_INSTR。

例子:

SQL> SELECTREGEXP_REPLACE(‘0123456789‘,‘678‘) result FROM DUAL;

RESULT

-------

0123459

SQL> SELECTREGEXP_REPLACE(‘999-888-1234‘, ‘([[:digit:]]{3})-([[:digit:]]{3})-([[:digit:]]{4})‘,

2 ‘(\3)\1 \2‘) result FROM DUAL;

RESULT

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

(1234)999 888

REGEXP_SUBSTR

语法:

REGEXP_SUBSTR (source_char, pattern [, position [, occurrence [, match_param [, subexpr ] ] ]] )

用法:

以正则表达式搜索并截取字符串,匹配原理与REGEXP_INSTR相似。

参数:

参数REGEXP_INSTR。

例子:

SQL> SELECTREGEXP_SUBSTR(‘http://www.oracle.com/database‘,

2 ‘http://(([[:alnum:]]+\.?){3,4})/?‘, 1,1,‘i‘,1) result FROM DUAL;

RESULT

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

www.oracle.com

REMAINDER

语法:

REMAINDER ( n2, n1 )

用法:

返回n2除以n1后的余数,计算原理可以参考MOD。

参数:

如果n1=0或者n2=无线,那么当参数是NUMBER时,Oracle返回一个错误,当参数是BINARY_FLOAT或BINARY_DOUBLE时,返回NaN。

例子:

SQL> SELECTREMAINDER(11,4),REMAINDER(11,-4),

2 REMAINDER(-11,4),REMAINDER(-11,-4) FROM DUAL;

REMAINDER(11,4) REMAINDER(11,-4)REMAINDER(-11,4) REMAINDER(-11,-4)

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

-1               -1                1                 1

REPLACE

语法:

REPLACE ( char,search_string [, replacement_string ] )

用法:

将char中的所有search_string替换成replacement_string。如果忽略replacement_string或为NULL,那将删除char中的所有search_string。

例子:

SQL> SELECTREPLACE(‘HELLO ORACLE‘, ‘O‘, ‘0‘) result FROM DUAL;

RESULT

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

HELL0 0RACLE

ROUND(date)

语法:

ROUND ( date [, fmt] )

用法:

返回关于格式fmt的完整日期。fmt默认为DAY。

例子:

SQL> SELECTROUND(TO_DATE(‘20110531091011‘,‘YYYYMMDDHH24MISS‘))

2 result FROM DUAL;

RESULT

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

31-MAY-11

SQL> SELECTROUND(TO_DATE(‘20110531091011‘,‘YYYYMMDDHH24MISS‘), ‘MONTH‘)

2 result FROM DUAL;

RESULT

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

01-JUN-11

SQL> SELECTROUND(TO_DATE(‘20110531091011‘,‘YYYYMMDDHH24MISS‘), ‘yyyy‘)

2 result FROM DUAL;

RESULT

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

01-JAN-11

SQL> SELECTROUND(TO_DATE(‘20110601091011‘,‘YYYYMMDDHH24MISS‘), ‘yyyy‘)

2 result FROM DUAL;

RESULT

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

01-JAN-11

SQL> SELECTROUND(TO_DATE(‘20110701091011‘,‘YYYYMMDDHH24MISS‘), ‘yyyy‘)

2 result FROM DUAL;

RESULT

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

01-JAN-12

ROUND(NUMBER)

语法:

ROUND ( n [, integer] )

用法:

返回四舍五入后的n。计算原理是如果n为0,总是返回0;如果n为正数,则返回FLOOR(n * POWER(10, integer) + 0.5) *POWER(10, -integer);如果n为负数,则返回-ROUND(-n, integer)。

参数:

n的默认值为0,当n大于0时,表示小数点右边进行四舍五入;当n小于0时,表示小数点左边进行四舍五入。

例子:

SQL> SELECTROUND(0, -1) result FROM DUAL;

RESULT

----------

0

SQL> SELECTROUND(1234.5678, 2) result FROM DUAL;

RESULT

----------

1234.57

SQL> SELECTROUND(9876.54321, -2) reulst FROM DUAL;

REULST

----------

9900

ROWIDTOCHAR

语法:

ROWIDTOCHAR ( rowid)

用法:

将rowid转化为VARCHAR2数据类型,长度为18字符。

例子:

SQL> SELECTROWIDTOCHAR(rowid),deptno FROM SCOTT.DEPT;

ROWIDTOCHAR(ROWID)     DEPTNO

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

AAASHhAAEAAAACHAAA         10

AAASHhAAEAAAACHAAB         20

AAASHhAAEAAAACHAAC         30

AAASHhAAEAAAACHAAD         40

RPAD

语法:

RPAD ( expr1, n [,expr2 ] )

用法:

返回长度为n的expr1字符串。如果expr1的长度小于n,则用expr2右填充expr1到长度n为止;expr2默认为一个空格符。如果expr1的长度大于n,截取expr1前n个字符返回。

例子:

SQL> SELECTRPAD(‘ORACLE‘,10) result FROM DUAL;

RESULT

----------

ORACLE

SQL> SELECTRPAD(‘ORACLE‘,10,‘-‘) result FROM DUAL;

RESULT

----------

ORACLE----

SQL> SELECTRPAD(‘ORACLE‘,4) result FROM DUAL;

RESU

----

ORAC

RTRIM

语法:

RTRIM ( char [, set] )

用法:

删除char从右边开始的包含在set中的字符,直到遇到第一个不再set中的字符。set默认是空格符。

例子:

SQL> SELECTRTRIM(‘<===>ORACLE<===>‘, ‘<>=‘) result FROM DUAL;

RESULT

-----------

<===>ORACLE

SQL> SELECTRTRIM(‘   ORACLE   ‘) result FROM DUAL;

RESULT

---------

ORACLE

SESSIONTIMEZONE

语法

SESSIONTIMEZONE

用法:

返回当前会话的时区。

例子:

SQL> SELECTSESSIONTIMEZONE FROM DUAL;

SESSIONTIMEZONE

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

+08:00

SIGN

语法:

SIGN ( n )

用法:

返回n的符号。对于NUMBER,当n<0时,返回-1;当n=0时,返回0;当n>0时,返回1。对于BINARY_FLOAT或BINARY_DOUBLE,但n<0时,返回-1;当n>=0或n=NaN时,返回1。

例子:

SQL> SELECTSIGN(-10), SIGN(0), SIGN(10) FROM DUAL;

SIGN(-10)   SIGN(0)   SIGN(10)

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

-1          0          1

SIN

语法:

SIN ( n )

用法:

返回n的正弦值。

例子:

SQL> SELECTSIN(30 * 3.14159265359/180) result FROM DUAL;

RESULT

----------

.5

SOUNDEX

语法:

SOUNDEX ( char )

用法:

返回char的语音表示字符。规则是保留第一个字符,删除剩余的aehiouwy中的字符;映射bfpv=1,cgjkqsxz=2,dt=3,l=4,mn=5,r=6;相邻的语音字符相同,则删除重复的一个;最后返回4位语音字符,不足4位,用0右填充。

例子:

SQL> SELECTSOUNDEX(‘ORACLE‘) result FROM DUAL;

RESU

----

O624

SQL> SELECTSOUNDEX(‘Bad‘) result FROM DUAL;

RESU

----

B300

SQRT

语法:

SQRT ( n )

用法:

返回n的平方根。如果n为NUMBER,那么n不能为负数。如果n为BINARY_FLOAT或BINARY_DOUBLE,那么n>=0,返回正数;n=-0,返回-0;n<0,返回NaN。

例子:

SQL> SELECTSQRT(100) FROM DUAL;

SQRT(100)

----------

10

SQL> SELECTSQRT(-100) FROM DUAL;

SELECT SQRT(-100)FROM DUAL

*

ERROR at line 1:

ORA-01428: argument‘-100‘ is out of range

STDDEV

语法:

STDDEV ( [ DISTINCT| ALL ] expr )

用法:

返回expr的标准差。

例子:

SQL> SELECTSTDDEV(sal) FROM scott.emp;

STDDEV(SAL)

-----------

1182.50322

SUBSTR

语法:

SUBSTR ( char,position [, substring_length ] )

用法:

从char中position开始截取长度为substring_length的字符串。如果position为0,则改成1;如果position为正数,则从char的左边开始数;如果position为负数,则从char的右边开始数。如果substring_length忽略,则截取到char的最后。

例子:

SQL> SELECTSUBSTR(‘ORACLE‘,4,5) result FROM DUAL;

RES

---

CLE

SQL> SELECTSUBSTR(‘ORACLE‘,-4,2) result FROM DUAL;

RE

--

AC

SUM

语法:

SUM ( [ DISTINCT |ALL ] expr )

用法:

计算expr的总和。

例子:

SQL> SELECTSUM(sal) result FROM scott.emp;

RESULT

----------

29025

SYS_CONNECT_BY_PATH

语法:

SYS_CONNECT_BY_PATH( column, char )

用法:

只在分级查询中有效,返回column从根到节点的路径,以char分隔。

例子:

SQL> SELECTLPAD(‘ ‘,2*LEVEL-1)||SYS_CONNECT_BY_PATH(ename,‘/‘) path

2  FROMscott.emp START WITH ename=‘JONES‘

3 CONNECT BY PRIOR empno=mgr;

PATH

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

/JONES

/JONES/SCOTT

/JONES/SCOTT/ADAMS

/JONES/FORD

/JONES/FORD/SMITH

SYS_CONTEXT

语法:

SYS_CONTEXT (‘namespace‘, ‘parameter‘ [, length ] )

用法:

返回当前上下文的namespace中,parameter的值。Oracle提供了一个内置的namespace是USERENV。

参数:

length默认为256,可选范围是1至4000字节。如果不在此范围,Oracle会忽略它并使用默认值。

例子:

SQL> SELECTSYS_CONTEXT(‘USERENV‘, ‘SESSION_USER‘) result FROM DUAL;

RESULT

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

TEST

SQL> SELECTSYS_CONTEXT(‘USERENV‘, ‘SESSION_USER‘, 2) result

2  FROMDUAL;

RESULT

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

TE

SYS_EXTRACT_UTC

语法:

SYS_EXTRACT_UTC (datetime_with_timezone )

用法:

返回datetime_with_timezone的协调世界时。

例子:

SQL> SELECTSYS_EXTRACT_UTC(SYSTIMESTAMP) FROM DUAL;

SYS_EXTRACT_UTC(SYSTIMESTAMP)

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

14-OCT-1108.41.51.754413 AM

SYS_GUID

语法:

SYS_GUID ()

用法:

返回一个GUID。

例子:

SQL> SELECTSYS_GUID FROM DUAL;

SELECT SYS_GUID FROMDUAL

*

ERROR at line 1:

ORA-00904:"SYS_GUID": invalid identifier

SQL> SELECTSYS_GUID() FROM DUAL;

SYS_GUID()

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

AF3F48998E6789F8E040E10A4A0B31DF

SYSDATE

语法:

SYSDATE

用法:

返回数据库系统的当前日期时间。

例子:

SQL> SELECTSYSDATE FROM DUAL;

SYSDATE

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

14-OCT-11

SYSTIMESTAMP

语法:

SYSTIMESTAMP

用法:

返回数据库系统的当前日期时间,包括小数秒和时区信息。

例子:

SQL> SELECTSYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP

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

14-OCT-1104.50.52.557445 PM +08:00

TAN

语法:

TAN ( n )

用法:

返回n的正切值。

例子:

SQL> SELECTTAN(135 * 3.14159265359/180) result FROM DUAL;

RESULT

----------

-1

TIMESTAMP_TO_SCN

语法:

TIMESTAMP_TO_SCN (timestamp )

用法:

根据timestamp返回一个最接近的SCN。

例子:

SQL> SELECTTIMESTAMP_TO_SCN(SYSTIMESTAMP) result FROM DUAL;

RESULT

----------

14384740

TO_BINARY_DOUBLE

语法:

TO_BINARY_DOUBLE (expr [, fmt [, ‘nlsparam‘ ] ] )

用法:

返回一个双精度浮点数。从字符串转化成BINARY_DOUBLE是不精确的;从BINARY_FLOAT转化成BINARY_DOUBLE是精确的。

参数:

expr可以是字符串或数值型,如NUMBER,BINARY_FLOAT,BINARY_DOUBLE。如果expr是BINARY_DOUBLE,返回expr。只有expr是字符串时,fmt和nlsparam才可用。‘INF‘(不分大小写)转化成正无限;‘-INF‘(不分大小写)转化成负无限;‘NaN‘转化成NaN(不是数值)。在expr中不能使用浮点数格式化元素(F,f,D,d)。

例子:

SQL> SELECTTO_BINARY_DOUBLE(‘INF‘) FROM DUAL;

TO_BINARY_DOUBLE(‘INF‘)

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

Inf

SQL> SELECTTO_BINARY_DOUBLE(‘-inf‘) FROM DUAL;

TO_BINARY_DOUBLE(‘-INF‘)

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

-Inf

SQL> SELECTTO_BINARY_DOUBLE(‘nan‘) FROM DUAL;

TO_BINARY_DOUBLE(‘NAN‘)

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

Nan

SQL> SELECTTO_BINARY_DOUBLE(123.4567) FROM DUAL;

TO_BINARY_DOUBLE(123.4567)

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

1.235E+002

SQL> SELECTTO_BINARY_DOUBLE(‘123,456.78‘,‘999,999.99‘) FROM DUAL;

TO_BINARY_DOUBLE(‘123,456.78‘,‘999,999.99‘)

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

1.235E+005

TO_BINARY_FLOAT

语法:

TO_BINARY_FLOAT (expr [, fmt [, ‘nlsparam‘ ] ] )

用法:

返回一个单精度浮点数。从字符串转化成BINARY_FLOAT是不精确的;如果BINARY_DOUBLE的精度超过BINARY_FLOAT,则从BINARY_DOUBLE转化成BINARY_FLOAT是不精确的。

参数:

expr可以是字符串或数值型,如NUMBER,BINARY_FLOAT,BINARY_DOUBLE。如果expr是BINARY_FLOAT,返回expr。只有expr是字符串时,fmt和nlsparam才可用。‘INF‘(不分大小写)转化成正无限;‘-INF‘(不分大小写)转化成负无限;‘NaN‘转化成NaN(不是数值)。在expr中不能使用浮点数格式化元素(F,f,D,d)。

例子:

SQL> SELECTTO_BINARY_FLOAT(‘INF‘) FROM DUAL;

TO_BINARY_FLOAT(‘INF‘)

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

Inf

SQL> SELECTTO_BINARY_FLOAT(‘-inf‘) FROM DUAL;

TO_BINARY_FLOAT(‘-INF‘)

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

-Inf

SQL> SELECTTO_BINARY_FLOAT(‘nan‘) FROM DUAL;

TO_BINARY_FLOAT(‘NAN‘)

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

Nan

SQL> SELECTTO_BINARY_FLOAT(123.4567) FROM DUAL;

TO_BINARY_FLOAT(123.4567)

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

1.235E+002

SQL> SELECTTO_BINARY_FLOAT(‘123,456.78‘,‘999,999.99‘) FROM DUAL;

TO_BINARY_FLOAT(‘123,456.78‘,‘999,999.99‘)

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

1.235E+005

TO_BLOB

语法:

TO_BLOB ( raw_value )

用法:

将LONG RAW和RAW转化成BLOB。

例子:

SQL> CREATE TABLEraw_table (raw_column RAW(2000));

Table created.

SQL> INSERT INTOraw_table VALUES (HEXTORAW(‘1234567890ABCDEF‘));

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECTTO_BLOB(raw_column) blob FROM raw_table;

BLOB

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

1234567890ABCDEF

TO_CHAR(CHARACTER)

语法:

TO_CHAR ( { nchar |clob | nclob } )

用法:

将NCHAR,NVARCHAR2,CLOB或NCLOB转化成数据库字符集,返回值总是VARCHAR2类型。当LOB的长度超过VARCHAR2的最大长度时,Oracle会返回一个错误。

例子:

SQL> SELECTTO_CHAR(‘ORACLE DATABASE‘) result FROM DUAL;

RESULT

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

ORACLE DATABASE

TO_CHAR(DATETIME)

语法:

TO_CHAR ( { datetime| interval } [, fmt [, ‘nlsparam‘ ] ] )

用法:

将DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL DAY TO SECOND,INTERVAL YEAR TO MONTH转化成格式为fmt的VARCHAR2类型。如果忽略fmt,将以下面的规则进行处理:DATE转化成默认的日期格式;TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE转化成默认的时间戳格式;TIMESTAMP WITH TIME ZONE转化成默认的时间戳加时区的格式;INTERVAL值转化成数字代表的格式。

参数:

nlsparam可以指定会话的语言,如NLS_DATE_LANGUAGE=language。

例子:

SQL> SELECTTO_CHAR(SYSDATE) result FROM DUAL;

RESULT

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

17-OCT-11

SQL> SELECTTO_CHAR(SYSTIMESTAMP) result FROM DUAL;

RESULT

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

17-OCT-1110.46.31.729122 AM +08:00

TO_CHAR(NUMBER)

语法:

TO_CHAR ( n [, fmt[, ‘nlsparam‘ ] ] )

用法:

将数值n转化成格式是fmt的VARCHAR2。如果n是负数,负号会放在格式化的字符串之前,如TO_CHAR(-1, ‘$9‘)返回-$1,而不是$-1。

参数:

nlsparam可以指定小数点、千分位、货币符号(Local和International)。如NLS_NUMERIC_CHARACTERS=‘dg‘,NLS_CURRENCY=‘text‘,NLS_ISO_CURRENCY=territory。

例子:

SQL> SELECTTO_CHAR(-10000,‘99G999D99‘) result FROM DUAL;

RESULT

----------

-10,000.00

SQL> SELECTTO_CHAR(-10000,‘L99G999D99‘) result FROM DUAL;

RESULT

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

-$10,000.00

SQL> SELECT TO_CHAR(-10000,‘L99G999D99MI‘)result FROM DUAL;

RESULT

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

$10,000.00-

SQL> SELECTTO_CHAR(-10000,‘L99G999D99MI‘,

2 ‘NLS_NUMERIC_CHARACTERS=‘‘,.‘‘ NLS_CURRENCY=‘‘AusDollars‘‘ ‘) result

3  FROM DUAL;

RESULT

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

AusDollars10.000,00-

TO_CLOB

语法:

TO_CLOB ( {lob_column | char } )

用法:

将LOB字段中或字符串中的NCLOB值转化为CLOB值。

例子:

SQL> SELECTTO_CLOB(‘ORACLE DATABASE‘) result FROM DUAL;

RESULT

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

ORACLE DATABASE

TO_DATE

语法:

TO_DATE ( char [,fmt [, ‘nlsparam‘ ] ] )

用法:

将字符串char转化成DATE。

参数:

fmt指定了char的时间格式。如果忽略fmt,就使用默认的时间格式。默认的时间格式有NLS_TERRITORY隐式决定,或由NLS_DATE_FORMAT显示决定。如果fmt是J,代码是Julian,那么char必须是整数。nlsparam可以指定字符串的语言,如NLS_DATE_LANGUAGE=language。

例子:

SQL> SELECTTO_DATE(‘20110101 23:59:59‘, ‘YYYYMMDD HH24:MI:SS‘) result

2  FROMDUAL;

RESULT

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

01-JAN-11

TO_DSINTERVAL

语法:

TO_DSINTERVAL ( ‘{[+|-] days hours : minutes : seconds [, frac_secs ] | [-] P [ days D ] [ T [hours H ] [ minutes M ] [ seconds [, frac_secs ] S ] }‘

用法:

将字符串转化成INTERVAL DAY TO SECOND。TO_DSINTERVAL可以接受两种类型的格式,SQL标准和ISO标准。对于SQL标准,days范围是0~999999999;hours范围是0~23;minutes和seconds是0~59;frac_secs是.0~.999999999。对于ISO标准,days、hours、minutes和seconds的范围是0~999999999;frac_secs是.0~.999999999;格式中不能有空格符;如果指定了T,必须至少指定hours、minutes或seonds中的一个。

例子:

SQL> SELECTSYSDATE + TO_DSINTERVAL(‘100‘) result FROM DUAL;

SELECT SYSDATE +TO_DSINTERVAL(‘100‘) result FROM DUAL

*

ERROR at line 1:

ORA-01867: theinterval is invalid

SQL> SELECTSYSDATE + TO_DSINTERVAL(‘100 00: 00:  00‘) result FROM DUAL;

RESULT

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

25-JAN-12

SQL> SELECTSYSDATE + TO_DSINTERVAL(‘P100DT50H‘) result FROM DUAL;

RESULT

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

27-JAN-12

TO_MULTI_BYTE

语法:

TO_MULTI_BYTE ( char)

用法:

将char中的单字节转化为对应的多字节字符。

例子:

SQL> SELECTTO_MULTI_BYTE(‘ORACLE‘) result FROM DUAL;

RESULT

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

ORACLE

TO_NUMBER

语法:

TO_NUMBER ( expr [,fmt [, ‘nlsparam‘ ] ] )

用法:

将expr转化成NUMBER类型。

参数:

参考TO_CHAR(number)。

例子:

SQL> SELECT TO_NUMBER(‘-RMB1,000‘,‘L9G999D99‘,

2 ‘NLS_NUMERIC_CHARACTERS=‘‘.,‘‘ NLS_CURRENCY=‘‘RMB‘‘‘) result

3  FROMDUAL;

RESULT

----------

-1000

TO_SINGLE_BYTE

语法:

TO_SINGLE_BYTE (char )

用法:

将char中多字节字符转成相应的单字节字符。

例子:

SQL> SELECT TO_SINGLE_BYTE(TO_MULTI_BYTE(‘ORACLE‘))result

2  FROMDUAL;

RESULT

------

ORACLE

TO_TIMESTAMP

语法:

TO_TIMESTAMP ( char[, fmt [, ‘nlsparam‘ ] ] )

用法:

将字符串char转换成TIMESTAMP数据类型。

参数:

参考TO_CHAR(DATE)函数。

例子:

SQL> SELECTTO_TIMESTAMP(‘20110101 12:34:56.7890‘,

2 ‘YYYYMMDD HH24:MI:SS.FF‘) result FROM DUAL;

RESULT

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

01-JAN-1112.34.56.789000000 PM

TO_TIMESTAMP_TZ

语法:

TO_TIMESTAMP_TZ (char [, fmt [, ‘nlsparam‘ ] ] )

用法:

将字符串char转化成TIMESTAMP WITH TIME ZONE类型。

参数:

参考TO_CHAR(DATE)函数。

例子:

SQL> SELECTTO_TIMESTAMP_TZ(‘20110101 12:34:56.7890 +08:00‘,

2 ‘YYYYMMDD HH24:MI:SS.FF TZH:TZM‘) result FROM DUAL;

RESULT

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

01-JAN-11 12.34.56.789000000PM +08:00

TO_YMINTERVAL

语法:

TO_YMINTERVAL ( ‘{[+|-] years - months | [-]P [ years Y ] [ months M ] }‘ )

用法:

将字符串转化成INTERVAL YEAR TO MONTH。参数有两种,一种是SQL标准,另一种是ISO标准。ISO标准需要可以指定days、hours、minutes和seconds,但不起作用。

例子:

SQL> SELECT SYSDATE+TO_YMINTERVAL(‘1-1‘)result FROM DUAL;

RESULT

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

17-NOV-12

SQL> SELECTSYSDATE+TO_YMINTERVAL(‘P1Y1M1D‘) result FROM DUAL;

RESULT

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

17-NOV-12

SQL> SELECTSYSDATE+TO_YMINTERVAL(‘P1Y1M20D‘) result FROM DUAL;

RESULT

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

17-NOV-12

TRANSLATE

语法:

TRANSLATE ( expr,from_string, to_string )

用法:

将expr中from_string中的字符替换成to_string中的相应字符。当from_string包含的字符多于to_string,没有对应的字符就删除其在expr中的字符。如果一个字符在from_string中出现多次,只替换成第一个相应的字符。

例子:

SQL> SELECTTRANSLATE(‘ORACLE DATABASE‘, ‘OLE‘, ‘01‘) result

2  FROMDUAL;

RESULT

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

0RAC1 DATABAS

TRIM

语法:

TRIM ( [ { { LEADING| TRAILING | BOTH } [ trim_character ] | trim_character } FROM ] trim_source )

用法:

删除trim_source中开头或结尾的trim_character中的字符。如果指定了LEADING,表示从开头删除;如果指定了TRAILING,表示从结尾删除;如果指定了BOTH,表示从两头删除。如果没有指定trim_source,默认是空格符。如果只指定了trim_source,表示删除两头的空格符。trim_character只能是一个字符。

例子:

SQL> SELECT TRIM( ‘-‘ FROM ‘--ORACLE‘) result FROM DUAL;

RESULT

------

ORACLE

SQL> SELECTTRIM(‘ OE‘ FROM ‘ ORACLE DATABASE  ‘)result FROM DUAL;

SELECT TRIM(‘ OE‘FROM ‘ ORACLE DATABASE  ‘) result FROMDUAL

*

ERROR at line 1:

ORA-30001: trim setshould have only one character

TRUNC(DATE)

语法:

TRUNC ( date [, fmt] )

用法:

截取掉有fmt指定的日期部分。

例子:

SQL> SELECTTRUNC(SYSDATE, ‘MM‘) result FROM DUAL;

RESULT

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

01-OCT-11

TRUNC(NUMBER)

语法:

TRUNC ( n1 [, n2 ] )

用法:

将n1截取到小数点的n2位置。如果n2>0,从小数点右边截取;如果n1<0,从小数点左边截取。

例子:

SQL> SELECTTRUNC(15.79,1) result FROM DUAL;

RESULT

----------

15.7

SQL> SELECT TRUNC(15.79,-1)result FROM DUAL;

RESULT

----------

10

UID

语法:

UID

用法:

返回当前用户的话会ID。

例子:

SQL> SELECT UIDFROM DUAL;

UID

----------

101

UPPER

语法:

UPPER ( char )

用法:

将char中字符串转化为大写字母。

例子:

SQL> SELECTUPPER(‘oracle‘) result FROM DUAL;

RESULT

------

ORACLE

USER

语法:

USER

用法:

返回当前用户的名称。

例子:

SQL> SELECT USERFROM DUAL;

USER

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

TEST

USERENV

语法:

USERENV (‘parameter‘ )

用法:

返回关于当前会话的信息。

参数:

parameter可以是CLIENT_INFO,ENTRYID,ISDBA,LANG,LANGUAGE,SESSIONID,SID,TERMINAL。

例子:

SQL> SELECTUSERENV(‘LANGUAGE‘) language FROM DUAL;

LANGUAGE

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

AMERICAN_AMERICA.ZHT16MSWIN950

VARIANCE

语法:

VARIANCE ( [DISTINCT | ALL ] expr )

用法:

返回expr表达式的方差。

例子:

SQL> SELECTVARIANCE(sal) FROM scott.emp;

VARIANCE(SAL)

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

1398313.87

 
时间: 2024-10-25 20:52:39

oracle函数详解的相关文章

ORACLE函数详解【weber出品】

一.什么是函数 一个函数: 1. 是命名的PL/SQL块,必须返回一个值 2. 可以存储到数据库中重复执行 3. 可以作为表达式的一部分或者提供一个参数值 二.创建函数的语法 必须至少有一个返回值,创建模板: CREATE [OR REPLACE] FUNCTION function_name [(parameter1 [mode1] datatype1, ...)] RETURN datatype IS|AS [local_variable_declarations; …] BEGIN --

ORACLE函数之GREATEST函数详解实例

1           语法 GREATEST(expr_1, expr_2, ...expr_n) 2           说明 GREATEST(expr_1, expr_2, ...expr_n)函数从表达式(列.常量.计算值)expr_1, expr_2, ... expr_n等中找出最大的数返回.在比较时,OracIe会自动按表达式的数据类型进行比较,以expr_1的数据类型为准. 3    允许使用的位置 过程性语句和SQL语句. 4           示例 4.1        

Netsuite Formula &gt; Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 组函数 本文将讨论如何利用单行函数以及使用规则. SQL中的单行函数 SQL和PL/SQL中自带很多类型的函数,有字符.数字.日期.转换.和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数.这些函数均可用于SELECT,WHERE.ORDER BY等子句中,例如下面的例子中就包含了TO

【Oracle】详解Oracle常用函数

Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果. Oracle 数据库中主要使用两种类型的函数: 1.  单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果, 比如:MOD(x,y)返回 x 除以 y 的余数(x 和 y 可以是两个整数,也可以是表中的整 数列).常用的单行函数有: Ø  字符函数:对字符串操作. Ø  数字函数:对数字进行计算,返回一个数字. Ø  转换函

Oracle中的substr()函数 详解及应用

注:本文来源于<Oracle中的substr()函数 详解及应用> 1)substr函数格式   (俗称:字符截取函数) 格式1: substr(string string, int a, int b); 格式2:substr(string string, int a) ; 解释: 格式1:        1.string 需要截取的字符串         2.a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)        3.b 要截取的字符串的长度 格式2:     

Oracle ROWID详解

1.ROWID定义 ROWID:数据库中行的全局唯一地址 对于数据中的每一行,rowid伪列返回行的地址.rowid值主要包含以下信息: 对象的数据对象编号 该行所在的数据文件中的数据块 该行中数据块的位置(第一行是0) 数据行所在的数据文件(第一个文件是1).该文件编号是相对于表空间. 通常来说,一个rowid值唯一标识数据中的一行.然而,存储在同一聚簇中不同的表可以有相同的rowid. 2.扩展ROWID 从Oracle 8i开始使用扩展rowid标识行物理地址 扩展rowid使用base6

问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.2.6 重新编译触发器 8.3 删除和使能触发器 8.4 触发器和数据字典 8.5   数据库触发器的应用举例 触发器是许多关系数据库系

Oracle索引详解

Oracle索引详解(一) ### --索引介绍 ??索引对于Oracle学习来说,非常重要,在数据量巨大的状况下,使用恰到好处的索引,将会使得数据查询时间大大减少,于2017/12/25暂时对Oracle中的索引进行一个大致的了解. 索引的创建语法 索引的特点 索引的不足 比较适合建立索引的列的特点 不适合建立索引的列的特点 限制索引(建立了索引,但是无法使用) 查询索引 组合索引 Oracle rowid 选择性 群集因子 二元高度 快速全表扫描 跳跃式扫描 索引的创建语法 create o

ORACLE存储过程详解

ORACLE存储过程详解 1.定义 所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作. 2.存储过程的创建 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常. (1)无参存储过程语法 1 2 3 4 5 6 7 8 create or replace procedure