Oracle

本章介绍的是使用Oracle时候,SQL语句支持的常用函数。

字符函数

INSTR

返回给定子字符串首次出现的位置。

LENGTH

返回给定字符串的长度。

LOWER

返回字符串的小写形式。

UPPER

返回字符串大写形式。

SUBSTR

返回从指定位置开始指定长度的字符串,例如:SUBSTR('abcdefg', 2, 3) = 'bcd'

REPLACE

将指定的子字符串替换为其它的字符串,例如:REPLACE('abcdefg','bc','45') = 'a45defg'

数学函数

Abs

返回给定数值的绝对值。

CEIL

返回大于或等于给定数值的最小整数。

Floor

返回小于或等于给定数值的最大整数。

Round

将数值四舍五入到指定的小数位数。

例如:

SELECT 客户,Count(*) AS 订单数, SUM(数量) AS 数量, Round(SUM(数量 * 单价 * (1 - 折扣)), 2) AS 金额 FROM {订单} GROUP BY 客户

上述语句的金额由数量、单价、折扣计算得出,且保留两位小数。

日期函数

SYSDATE

返回系统日期和时间。

例如加载当天的订单:

Select * From 订单 Where 订购日期 = SYSDATE

TO_CHAR

获得日期值的指定部分。

语法:

TO_CHAR(date,interval)

date:     日期值
interval:字符型,表示希望返回的时间部分。

interval的可设置值有:

YYYY:年
Q:   季度
MM:  月
WW:  周
DD:  天
HH24:小时
MI:  分钟
SS:  秒
D:   星期几
DDD: 一年中的某一天

需要注意的是,TO_CHAR返回的是一个数字,而不是数值,例如加载1998年入职的员工:

Select * From EMPLOYEES Where To_Char(Hire_Date,'YYYY') = '1998'

TO_DATE

将字符串转换为日期。

例如加载1994年8月14日入职的员工:

Select * From EMPLOYEES Where HIRE_DATE = TO_DATE('8/16/1994','MM/DD/YYYY')

ADD_MONTHS

给日期值加上指定的月数。

例如加载最近两个月入职的员工:

Select * From EMPLOYEES Where Hire_Date > ADD_MONTHS(SYSDATE,-2)

空值处理函数

NVL

判定一个表达式的值是否为空,如果不为空,则返回表达式的值,否则返回一个替代值。

语法

NVL(expression, value)

expression一个表达式,如果此表达式的值不为空,则返回此值。
value
     一个替代值,如果表达式的值为空,则返回此替代值。

例如:

Select 日期, 产品, 数量, 数量, 单价, NVL(折扣,0) As 折扣 From {订单}

上述的语句中,如果已经输入折扣,则正常显示折扣,否则折扣列显示的是0。
再次提示:0和空值是两回事,空值表示没有输入数据,而0意味着用户已经输入了一个为0的值。

COALESCE

COALESC函数可以指定任意多个参数,并返回这些参数中第一个不为空的值,如果全部为空,则返回空值。
COALESCE函数相当于
NVL函数的增强版。

条件语句

Case When

Case When语句用于进行条件判断。 

语法1

Case 表达式
When 比较值1 Then 返回值1
When 比较值2 Then 返回值2
When 比较值3 Then 返回值3
....
Else 默认返回值
End

当表达式等于比较值1时,则得到返回值1,当表达式等于比较值2时,则得到返回值2,其余类推;当比较结束,没有符合的比较值时,则得到默认返回值。

例如

Select CName As 客户名称,
(Case CLevel
When 1 Then 'VIP客户'
When 2 Then '高级客户' 
When 3 Then '普通客户'
Else '错误等级'
End) As 客户等级 From {客户}

语法2

Case
When 表达式1 Then 返回值1
When 表达式2 Then 返回值2
When 表达式3 Then 返回值3
...
Else 默认返回值
End

当表达式1成立时,则得到返回值1,当表达式2成立时,则得到返回值2,其余类推;没有表达式成立时,则得到默认返回值。

例如:

Select 姓名,
(Case
When 体重 < 40 Then '偏瘦'
When 体重 > 50 Then '偏胖'  
Else '适中'
End) As 体型 From {学生}


本页地址:http://www.foxtable.com/webhelp/topics/1828.htm