按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
DECODE 函数
DECODE 函数是 SQL*PLUS 中众多功能强大的函数之一— — 也许它的功能是最强大
的 标准的 SQL 中没有过程函数 它是包括在如 COBOL 和 C 语言中的
DECODE 语句与程序语言中的 IF THEN 语句类似 对于复杂的报表来说灵活性是
必需的 DECODE 可以弥补标准的 SQL 与过程语言函数之间的缺陷
语法
DECODE(column1; value1; output1; value2; output2; output3)
语法中的例子是对 column1 列执行 DECODE 函数 如果 column1 有一个值为 value1
那么将会用 output1 来代替当前值 如果 column1 的值为value2 那么就会用 OUTPUT2 来
代替当前值 如果 column1 中哪两个值都不是 那么就会用 OUTPUT3 来代替当前值
实际应用的例子呢 我们先来对一个新表运行一下 SELECT 语句
输入
SQL》 select * from states;
461
…………………………………………………………Page 462……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输入
ST IL
IN OH
FL CA
KY NY
7 rows selected。
现在来用一下 DECODE 命令
输入
SQL》 select decode(state;'IN';'INDIANA';'OTHER') state from states;
输出
STATE OTHER
INDIANA OTHER
OTHER OTHER
OTHER OTHER
7 rows selected。
分析
符合条件 州为 IN 的记录只有一条 所以只有一行显示为 INDIANA 其它的记录
看上去都不符合 因为它们的显示为 OTHER
下边的例子为表中的每一个值提供了输入字符串 只有当你的州不在列表中时 你才
会收到 OTHER 信息
输入
SQL》 select decode(state;'IN';'INDIANA';
2 'FL';'FLORIDA';
3 'KY';'KENTUCKY';
4 'IL';'ILLINOIS';
5 'OH';'OHIO';
6 'CA';'CALIFORNIA';
7 'NY';'NEW YORK';'OTHER')
8 from states;
输出
462
…………………………………………………………Page 463……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
DECODE(STATE)
INDIANA
FLORIDA
KENTUCKY
ILLINOIS
OHIO
CALIFORNIA
NEW YORK
7 rows selected。
这实在太容易了 在下一个例子中将引入一个 PAY 表 这个表可以显示职 DECODE
函数更为强大的能力
输入
SQL》 col hour_rate hea 〃HOURLY|RATE〃 for 99。00
SQL》 col date_last_raise hea 〃LAST|RAISE〃
SQL》 select name; hour_rate; date_last_raise
2 from pay;
输出
HOURLY LAST
NAME RATE RAISE
JOHN 12。60 01…JAN…96
JEFF 8。50 17…MAR…97
RON 9。35 01…OCT…96
RYAN 7。00 15…MAY…96
BRYAN 11。00 01…JUN…96
MARY 17。50 01…JAN…96
ELAINE 14。20 01…FEB…97
7 rows selected。
准备好了吗 现在是给在 PAY 表中的每个人长工资的时候了 如果某个人上次长工资
的时间是 1997 年 那么将他的工资上浮 10% 如果他上次长工资是在 1996 年 那么将他
的工资上浮 20% 此外 还要显示在这两种情况下工资上调的百分率
输入
SQL》 col new_pay hea 'NEW PAY' for 99。00
SQL》 col hour_rate hea 'HOURLY|RATE' for 99。00
463
…………………………………………………………Page 464……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 col date_last_raise hea 'LAST|RAISE'
SQL》 select name; hour_rate; date_last_raise;
2 decode(substr(date_last_raise;8;2);'96';hour_rate * 1。2;
3 '97';hour_rate * 1。1) new_pay;
4 decode(substr(date_last_raise;8;2);'96';'20%';
5 '97';'10%';null) increase
6 from pay;
输出
HOURLY LAST
NAME RATE RAISE NEW PAY INC
JOHN 12。60 01…JAN…96 15。12 20%
JEFF 8。50 17…MAR…97 9。35 10%
RON 9。35 01…OCT…96 11。22 20%
RYAN 7。00 15…MAY…96 8。40 20%
BRYAN 11。00 01…JUN…96 13。20 20%
MARY 17。50 01…JAN…96 21。00 20%
ELAINE 14。20 01…FEB…97 15。62 10%
7 rows selected。
分析
根据输出情况 除了 JEFF 和 ELAINE 每个人的工资都上涨了 20% 他们在今年已经
涨过工资了
日期转换
如果你想对日期的显示加一些附加的格式 那么你�