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;
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

oracle函数详解-转的更多相关文章

  1. ORACLE函数详解【weber出品】

    一.什么是函数 一个函数: 1. 是命名的PL/SQL块,必须返回一个值 2. 可以存储到数据库中重复执行 3. 可以作为表达式的一部分或者提供一个参数值 二.创建函数的语法 必须至少有一个返回值,创 ...

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

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

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

    注:本文来源于<Oracle中的substr()函数 详解及应用> 1)substr函数格式   (俗称:字符截取函数) 格式1: substr(string string, int a, ...

  4. oracle 数据类型详解---日期型(转载)

    oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享: 注:由于INTER ...

  5. oracle rowid 详解

    oracle rowid详解 今天是2013-09-15,存储在数据库中的每一行数据都有一个地址,oracle使用rowid数据类型在存储地址.rowid有如下类别: 1)physical rowid ...

  6. Oracle索引详解

    Oracle索引详解(二) --索引分类   Oracle 提供了大量索引选项.知道在给定条件下使用哪个选项对于一个程序的性能来说非常重要.一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程 ...

  7. Oracle date 详解

    oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:注:由于INTERV ...

  8. 【Oracle】详解ORACLE中的trigger(触发器)

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  9. 问题: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 创 ...

随机推荐

  1. 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap

    国际惯例的题面:这种维护排序序列,严格大于的进行操作的题都很套路......我们按照[0,k],(k,2k],(2k,inf)分类讨论一下就好.显然第一个区间的不会变化,第二个区间的会被平移进第一个区 ...

  2. BZOJ.2002.Bounce 弹飞绵羊(LCT)

    题目链接 从一个点只能往后跳,即后继状态只有一个,那么拿nxt[x]做fa[x]啊!这样就成了一棵树,从每个点开始的答案是它到所在树的根节点的距离. nxt[]的更改即动态修改树边,用LCT即可. 这 ...

  3. linux VIM 下的语法高亮及自动缩进

    显示行号 set number 自动缩进有两个选项 set autoindent set cindent autoindent 就是自动缩进的意思,当你在输入状态用回车键插入一个新行,或者在 norm ...

  4. C++的多态

    继承.封装.多态是面向对象编程最主要的三个特征,有人说多态是理解C++最难理解的一部分,其实我觉得单单从技术上讲,多态并不难,难的是你需要懂得在何时使用多态,就像封装一样,封装本身不难,难的是你对整个 ...

  5. git 先创建远程库后克隆到本地

    前面学习了先有本地库,后有远程库的时候,如何关联远程库. 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskills ...

  6. 解决 ajax 不能下载文件的问题

  7. css属性在ie6,7,8下的区分

    "\9"可以将ie浏览器与其他浏览器区分开 ie6,ie7可识别"+" 只有ie6能识别"_" 例: .aa{ background-col ...

  8. oracle case when 用法

    原文:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html 1. CASE WHEN 表达式有两种形式 --简单Case函数 ...

  9. CDH:cdh5环境mkdir: Permission denied: user=root, access=WRITE, inode="/user":hdfs:hadoop:drwxr-xr-x

    产生问题原因: 环境hadoop2,cdh5创建 使用hadoop fs -mdkir /use/xxx创建文件路径时,出现权限问题 前提我们已经把当前用户zhangsan和root放到/etc/su ...

  10. hadoop权威指南学习(一) - 天气预报MapReduce程序的开发和部署

    看过Tom White写的Hadoop权威指南(大象书)的朋友一定得从第一个天气预报的Map Reduce程序所吸引, 殊不知,Tom White大牛虽然在书中写了程序和讲解了原理,但是他以为你们都会 ...