操作符 | 用途 | 例子 |
+ - | 表示正数或负数,正数可省去 + | -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;
2、伪列及伪表
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
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》
4 、SQL中的单记录函数
许多资料(包括Oracle 的资料)把Oracle的SQL语句中用到的函数分为单值函数和多值函数,单值函数又分为字符函数和数字函数。下面分别介绍它们。
4.1、单记录 字符函数
函 数 | 说 明 |
ASCII | 返回对应字符的十进制值 |
CHR | 给出十进制返回字符 |
CONCAT | 拼接两个字符串,与 || 相同 |
INITCAT | 将字符串的第一个字母变为大写 |
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
45、单记录 转换函数
函 数 | 描 述 |
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.6、其它的单记录函数
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.7、多记录组函数
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)
------------------------
1398313.87