Oracle
本章介绍的是使用Oracle时候,SQL语句支持的常用函数。
字符函数
INSTR
返回给定子字符串首次出现的位置。
LENGTH
返回给定字符串的长度。
LOWER
返回字符串的小写形式。
UPPER
返回字符串大写形式。
SUBSTR
返回从指定位置开始指定长度的字符串,例如:SUBSTR('abcdefg', 2, 3) = 'bcd'
REPLACE
将指定的子字符串替换为其它的字符串,例如:REPLACE('abcdefg','bc','45') =
'a45defg'
数学函数
Abs
返回给定数值的绝对值。
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 {学生}