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

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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  日
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!