友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

SQL 21日自学通(V3.0)(PDF格式)-第17部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




    同样  对字符型列应用该函数时会得到错误信息 



    输入/输出 



    SQL》SELECT  STDDEV(NAME)   FROM  TEAMSTATS 



    ERROR 



    ORA…01722   invalid  number 



   no rows selected 



    这些统计函数也可以在一个语句中同时使用 



    输入/输出 



    SQL》SELECT  COUNT   AB   AVG(AB)  MIN(AB)  MAX(AB)   STDDEV(AB) 



       VARIANCE(AB)   SUM(AB)  FROM  TEAMSTATS 



COUNT(   AVG(A   MIN(A   MAX(    STDDEV(  VARIANCE   SUM(A 



AB)      B)      B)      AB)    AB)       (AB)       B) 



6         119。167 1      187     75。589   5712。97    715 



    当你下次见到比赛结果时  你应该知道了 SQL 正在它的后台工作 



日期/ 时间函数 



    我们的生活是由日期和时间来掌握的             大多数的 SQL 解释器都提供了对它进行支持的 



函数  在这一部分我们使用 PROJECT 表来演求日期和时间函数的用法 



    输入 



    SQL》 SELECT *  FROM   PROJECT 



    输出 



       TASK            STARTDATE    ENDDATE 



EMAIL wyhsillypig@163。                                           68 


…………………………………………………………Page 69……………………………………………………………

SQL 21  日自学通(V1。0)                                           翻译人   笨猪 



       KICKOFFMTG          01…APR…95   01…APR…95 



       TECHSURVEY          02…APR…95   01…MAY…95 



       USERMTGS            15…MAY…95   30…MAY…95 



       DESIGNWIDGET        01…JUN…95   30…JUN…95 



       CODEWIDGET          01…JUL…95   02…SEP…95 



       TESTING             03…SEP…95   17…JAN…96 



    注  这里的数据类型使用日期型           大多数 SQL 解释器都有日期型  但是在语法的细则 



上有不同之处 



ADD_MONTHS 



    该函数的功能是将给定的日期增加一个月                举例来说     由于一些特殊的原因  上述的 



计划需要推迟两个月         那么可以用下面的方法来重新生成一个日程表 



    输入 



    SQL》SELECT  TASK  STARTDATE   ENDDATE 



       ORIGINAL_END   ADD_MONTHS(ENDDATE;2)   FROM   PROJECT 



    输出 



     TASK         STARTDATE    ORIGINAL    ADD_MONTH 



  KICKOFFMTG      01…APR…95    01…APR…95    01…JUN…95 



  TECHSURVEY      02…APR…95    01…MAY…95     01…JUL…95 



   USERMTGS       15…MAY…95    30…MAY…95     30…JUL…95 



 DESIGNWIDGET     01…JUN…95    30…JUN…95    31…AUG…95 



  CODEWIDGET       01…JUL…95   02…SEP…95    02…NOV…95 



    TESTING        03…SEP…95   17…JAN…96    17…MAR…96 



    尽管这种延误不太可能发生           但是实现日程的变动却是非常容易的               ADD_MONTHS 



也可能工作在 SELECT 之外  试着输入 



    输入 



    SQL》SELECT  TASK  TASKS_SHORTER_THAN_ONE_MONTH 



       FROM   PROJECT  WHERE ADD_MONTHS(STARTDATE     1)  ENDDATE 



    结果如下所示 



    输出 



          TASKS_SHORTER_THAN_ONE_MONTH 



EMAIL wyhsillypig@163。                                           69 


…………………………………………………………Page 70……………………………………………………………

SQL 21  日自学通(V1。0)                                             翻译人    笨猪 



          KICKOFF MTG 



          TECH SURVEY 



          USER MTGS 



          DESIGN WIDGET 



分析 



    你将会发现这一部分中的几乎所有的函数都可能工作在不只一个地方                            但是   如果没 



有 TO_CHAR 和 TO_DATE 函数的帮助  ADD_MONTH 就无法在字符或数字类型中工作 



这将在今天的晚些时候讨论 



LAST_DAY 



    LAST_DAY 可以返回指定月份的最后一天  例如               如果你想知道在 ENDDATE 列中的 



给出日期中月份的最后一天是几号时               你可以输入 



    输入 



    SQL》SELECT   ENDDATE   LAST_DAY   ENDDATE     FROM   PROJECT 



    结果如下 



    输出 



            ENDDATE     LAST_DAY(ENDDATE) 



            01…APR…95    30…APR…95 



            01…MAY…95    31…MAY…95 



            30…MAY…95    31…MAY…95 



            30…JUN…95    30…JUN…95 



            02…SEP…95    30…SEP…95 



            17…JAN…96    31…JAN…96 



    如果是在闰年的最后一天呢 



    输入/输出 



    SQL》SELECT   LAST_DAY(   1…FEB…95 ) NON_LEAP   LAST_DAY(   1…FEB…96 ) 



LEAP 



         FROM PROJECT; 



          NON_LEAP     LEAP 



          28…FEB…95    29…FEB…96 



          28…FEB…95    29…FEB…96 



          28…FEB…95    29…FEB…96 



EMAIL  wyhsillypig@163。                                             70 


…………………………………………………………Page 71……………………………………………………………

SQL 21  日自学通(V1。0)                                            翻译人   笨猪 



          28…FEB…95    29…FEB…96 



          28…FEB…95    29…FEB…96 



          28…FEB…95    29…FEB…96 



    分析 



    结果当然是正确的        可是为什么它输出了这么多行呢              这是因为你没有指定任何列或 



给出一个条件       SQL 引擎对数据库中的每一条记录都应用了这一语句  如果你想去掉这些 



重复的内容可以这样写 



    输入 



SQL》SELECT  DISTINCT  LAST_DAY('1…FEB…95') NON_LEAP  LAST_DAY('1…FEB…96') 



     LEAP  FROM   PROJECT 



    在这句话中我们使用了关键字 DISTINCT            参见第二天的  介绍查询 — — SELECT         语 



句的使用      来得到唯一的结果 



    输出 



          NON_LEAP     LEAP 



          28…FEB…95    29…FEB…96 



    虽然在我的电脑上该函数可以正确地识别出闰年来                    但是如果你要将它应用于金融领 



域  那么请在你的解释器上试一下  看一看它是否支持闰年 



MONTHS_BETWEEN 



    如 果 你 想 知 道 在 给 定 的 两 个 日 期 中 有 多 少 个 月          可 以 像 这 样 来 使 用 



MONTHS_BETWEEN 



    输入 



    SQL》select task startdate enddate months  between(Startdate;enddate)  duration from project 



    输出 



     TASK                STARTDATE    ENDDATE     DURATION 



     KICKOFF    MTG      01…APR…95    01…APR…95   0 



     TECH    SURVEY      02…APR…95    01…MAY…95   …。9677419 



     USER    MTGS        15…MAY…95    30…MAY…95   …。483871 



     DESIGN    WIDGET    01…JUN…95    30…JUN…95   …。9354839 



     CODE    WIDGET      01…JUL…95    02…SEP…95   …2。032258 



     TESTING             03…SEP…95    17…JAN…96   …4。451613 



EMAIL  wyhsillypig@163。                                           71 


…………………………………………………………Page 72……………………………………………………………

SQL 21  日自学通(V1。0)                                          翻译人   笨猪 



   请等一下     结果看起来不太对劲  再试一下 



    输入/输出 



    SQL》 SELECT TASK  STARTDATE   ENDDATE 



       MONTHS_BETWEEN      ENDDATE;STARTDATE       DURATION     FROM 



   PROJECT 



     TASK               STARTDATE   ENDDATE     DURATION 



     KICKOFF  MTG       01…APR…95   01…APR…95   0 



     TECH   SURVEY      02…APR…95   01…MAY…95   。96774194 



     USER  MTGS         15…MAY…95   30…MAY…95   。48387097 



     DESIGN  WIDGET     01…JUN…95   30…JUN…95   。93548387 



     CODE   WIDGET      01…JUL…95   02…SEP…95   2。0322581 



     TESTING            03…SEP…95    17…JAN…96  4。4516129 



分析 



    如你所见    MONTHS_BETWEEN    对于你所给出的月份的次序是敏感的  月份值为负 



数可能并不是一件坏事         例如    你可以利用负值来判断某一日期是否在另一个日期之前 



下例将会显示所有在 1995 年 5 月 19 日以前开始的比赛 



    输入 



    SQL》SELECT  * FROM   PROJECT 



       WHERE MONTHS_BETWEEN      19 MAY 95  STARTDATE) 



    输出 



           TASK            STARTDATE   ENDDATE 



           KICKOFF MTG    01…APR…95    01…APR…95 



           TECH SURVEY    02…APR…95    01…MAY…95 



           USER MTGS       15…MAY…95   30…MAY…95 



NEW_TIME 



    如果你想把时间调整到你所在的时区  你可以使用 NEW_TIME                 下边给出了所有的时 



区 



         简写            时区            简写              时区 



      AST or ADT  大西洋标准时间         HST or HDT  阿拉斯加_夏威夷时间 



      BST or BDT    英国夏令时         MST or MDT     美国山区时间 



EMAIL wyhsillypig@163。                                          72 


…………………………………………………………Page 73……………………………………………………………

SQL 21  日自学通(V1。0)                                              翻译人   笨猪 



      CST or CDT    美国中央时区             NST         新大陆标准时间 



      EST or EDT    美国东部时区           PST or PDT    太平洋标准时间 



         GMT       格伦威治标准时间         YST or YDT     Yukon 标准时间 



你可以这样来调节时间 



输入 



SQL》SELECT   ENDDATE    EDT   NEW_TIME   ENDDATE     EDT     PDT    FROM 



PROJECT 



    输出 



              EDT           NEW_TIME(ENDDATE      EDT    PDT 



      01…APR…95   1200AM       31…MAR…95            0900PM 



      01…MAY…95   1200AM        30…APR…95           0900PM 



      30…MAY…95   1200AM       29…MAY…95            0900PM 



      30…JUN…95   1200AM        29…JUN…95           0900PM 



      02…SEP…95   1200AM        01…SEP…95           0900PM 



       17…JAN…96  1200AM        16…JAN…96           0900PM 



    就像变魔术一样  所有的时间和日期都变成以新的时区标准了 



NEXT_DAY 



    NEXT_DAY  将返回与指定日期在同一个星期或之后一个星期内的                     你所要求的星期天 



数的确切日期       如果你想知道你所指定的日期的星期五是几号  可以这样做 



    输入 



    SQL》SELECT   STARTDATE    NEXT_DAY    STARTDATE    FRIDAY       FROM 



PROJECT 



    返回结果如下 



    输出 



            STARTDATE      NEXT_DAY(STARTDATE;  'FRIDAY') 



            01…APR…95               07…APR…95 



            02…APR…95               07…APR…95 



            15…MAY…95               19…MAY…95 



            01…JUN…95               02…JUN…95 



             01…JUL…95              07…JUL…95 



             03…SEP…95              08…SEP…95 



EMAIL  wyhsillypig@163。                                             73 


…………………………………………………………Page 74……………………………………………………………

SQL 21  日自学通(V1。0)                                        翻译人   笨猪 



   分析 



       输出的结果告诉了你距你所指定的日期最近的星期五的日期 



SYSDATE 



   SYSDATE 将返回系统的日期和时间 



   输入 



   SQL》 SELECT  DISTINCT SYSDATE  FROM   PROJECT 



   输出 



   SYSDATE 



    18…JUN…95 1020PM 



   如果你想知道在今天你都已经启动了哪些项目的话  你可以输入 



   输入/输出 



   SQL》 SELECT  * FROM   PROJECT  WHERE  STARTDATE  SYSDATE 



        TASK            STARTDATE     ENDDATE 



        CODE    WIDGET  01…JUL…95      02…SEP…95 



        TESTING         03…SEP…95      17…JAN…96 



   现在  你已经看到了项目在今天所启动的部分 



数学函数 



   大多数情况下你所检索到的数据在使用时需要用到数学函数                    大多数 SQL  的解释器都 



提供了与这里相类似的一些数学函数             这里的例子使用的表名字叫 NUMBERS          内容如下 



   输入 



   SQL》SELECT  *  FROM  NUMBERS 



   输出 



           A         B     A        B 



           3。1415    4     …57。667  42 



           …45       。707  15       55 

返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!