打印本文 打印本文 关闭窗口 关闭窗口
PL/Sql循序渐进全面学习教程--Oracle
作者:武汉SEO闵涛  文章来源:敏韬网  点击数5289  更新时间:2009/4/22 22:04:46  文章录入:mintao  责任编辑:mintao
          TRUNC(45.923,-1)= 40

       3、MOD  余除

          MOD(1600,300)

 

       实例:

       SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),

           2 ROUND(45.923,-1)

           3 FROM SYS.DUAL;

    四、ORACLE 日期格式和日期型函数:

 

       1、默认格式为DD-MON-YY.

       2、SYSDATE是一个求系统时间的函数

       3、DUAL[''''dju:el] 是一个伪表,有人称之为空表,但不确切。

       SQL> SELECT SYSDATE

          2 FROM SYS.DUAL;

       4、日期中应用的算术运算符

       例:SQL> SELECT last_name, (SYSDATE-start_date)/7 WEEKS

             2 FROM s_emp

              3 WHERE dept_id = 43;

       DATE+ NUMBER = DATE

       DATE-DATE= NUMBER OF DAYS

       DATE + (NUMBER/24) = 加1小时

 

       5、函数:

        MONTHS_BETWEEN(date1, date2) 月份间隔,可正,可负,也可是小数

        ADD_MONTHS(date,n)  加上N个月,这是一个整数,但可以为负

        NEXT_DAY(date,‘char’) 如:NEXT_DAY (restock_date,’FRIDAY’),从此日起下个周五。

        ROUND(date[,‘fmt’])

        TRUNC(date[,‘fmt’])

        解释下面的例子:

        SQL> SELECT id, start_date,

          2 MONTHS_BETWEEN (SYSDATE,start_date) TENURE,

          3 ADD_MONTHS(start_date,6) REVIEW

           4 FROM s_emp

            5 WHERE MONTHS_BETWEEN (SYSDATE,start_date)<48;

        我们看到:  MONTHS_BETWEEN (SYSDATE,start_date)<48,说明至今工作未满一年的员工。

       LAST_DAY (restock_date) 返回本月的最后一天

      SQL> select round(sysdate,''''MONTH'''') from dual

 

       ROUND(SYSD

         ----------

          01-11月-01

      round(sysdate,''''YEAR'''') = 01-1月 -02   

      ROUND 之后的值比基值大的最小符合值,大家可以用更改系统时间的方法测试,以15天为分界线,也是非常形象的四舍五入,而TRUNC恰好相反,是对现有的日期的截取。

    五、转换函数:

      1、TO_CHAR

           使一个数字或日期转换为CHAR

 

 

      2、TO_NUMBER

           把字符转换为NUMBER

 

      3、TO_DATE

         字符转换为日期

       这几个函数较为简单,但要多多实践,多看复杂的实例。

      SQL> SELECT ID,TO_CHAR(date_ordered,’MM/YY’) ORDERED

         2 FROM s_ord

         3 WHERE sales_rep_id = 11;

      转换时,要注意正确的缺省格式:

      SELECT TO_DATE(''''03-MAR-92'''') CORRECT FROM DUAL;//正确

       SELECT TO_DATE(''''031092'''') CORRECT FROM DUAL;//不正确

      SELECT TO_DATE(''''031095'''',''''MMDDYY'''') ERRORR FROM DUAL

            输出 3月10日

      SELECT TO_DATE(''''031095'''',''''DDMMYY'''') ERRORR FROM DUAL

               输出 10月3日

      4、实例:

        select to_char(sysdate,''''fmDDSPTH "of" MONTH YYYY AM'''') TODAYS FROM DUAL;

       TODAYS

        --------------------------------

       SIXTEENTH of 11月 2001 下午

       大小写没有什么影响,引号中间的是不参与运算。

      实例 :

       SELECT ROUND(SALARY*1.25) FROM ONE_TABLE;

      意义:涨25%工资后,去除小数位。在现实操作中,很有意义。

      5、混合实例:

SQL> SELECT last_name, TO_CHAR(start_date,

2 ’fmDD ”of” Month YYYY’) HIREDATE

3 FROM s_emp

4 WHERE start_date LIKE ’%91’;

LAST_NAME HIREDATE

------------ --------------------

Nagayama 17 of June 1991

Urguhart 18 of January 1991

Havel 27 of February 1991

     这里要注意:fmDD 和 fmDDSPTH之间的区别。

     SQL> SELECT id, total, date_ordered

         2 FROM s_ord

         3 WHERE date_ordered =

         4 TO_DATE(’September 7, 1992’,’Month dd, YYYY’);

   

    六、独立的函数嵌套

        SQL> SELECT CONCAT(UPPER(last_name),

             2 SUBSTR(title,3)) ”Vice Presidents”

             3 FROM s_emp

             4 WHERE title LIKE ’VP%’;

        * 嵌套可以进行到任意深度,从内向外计算。

      例:

       SQL> SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS

         2 (date_ordered,6),’FRIDAY’),

         3 ’fmDay, Month ddth, YYYY’)

         4 ”New 6 Month Review”

         5 FROM s_ord

         6 ORDER BY date_ordered;

        

       SQL> SELECT last_name,

         2 NVL(TO_CHAR(manager_id),’No Manager’)

         3 FROM s_emp

         4 WHERE manager_id IS NULL;

       对于例子,大家重要的理解,并多做测试,并注意英文版和中文版在日期上的区别。

       有些教材上的例子,不要盲目的相信其结果,实践后才有发言权,希望大家能够在学习的过程中不要忽略了用,

多想一想为什么实例要如此设计,在何种情况下应用此实例来解决问题。这样,我们才真正掌握了知识。

      

          课程 三 从多个表中提取数据
                                                                     

本课重点:
1、SELECT FROM 多个表,使用等连接或非等连接
2、使用外连接OUTER JOIN
3、使用自连接
注意:以下实例中标点均为英文半角
一、连接的概念:

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  下一页

打印本文 打印本文 关闭窗口 关闭窗口