友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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%                    他们在今年已经 



涨过工资了 



 日期转换 



     如果你想对日期的显示加一些附加的格式  那么你�
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!