《SQL 21日自学通(V3.0)(PDF格式)》第144章


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% 他们在今年已经 
涨过工资了 
日期转换 
如果你想对日期的显示加一些附加的格式 那么你?
小说推荐
返回首页返回目录