ITPub博客

首页 > 数据库 > Oracle > 两个日期相关的SQL

两个日期相关的SQL

Oracle 作者:anqela2010 时间:2014-03-04 22:35:49 0 删除 编辑
最近有在看OCP的教材,对其中几个经典的题目做个记录(案例:HR):

问题一:显示每一个员工的姓氏、聘用日期和薪金复核日期,薪金复核日期是服务六个月之后的第一个星期一。将该列标记为REVIEW。规定这一日期的格式,使其显示类似于:“Monday,the Thirty-First of July,2000",结果如下图所示:

FIRST_NAME           HIRE_DATE   REVIEW
-------------------- ----------- ------------------------------------------------------
Hermann              6/7/2002    Monday   ,the NINTH of December ,2002
Shelley              6/7/2002    Monday   ,the NINTH of December ,2002
William              6/7/2002    Monday   ,the NINTH of December ,2002


最初的时候我看错了题意,结果写成了列到这个星期的星期一的句子:

SELECT first_name,

     hire_date,

     to_char( ( add_months(hire_date,6) - to_char( add_months(hire_date,6),'D' ) + 2 ),

         'Day,"the" DDSPTH "of" Month,YYYY'

         ) review

FROM employees;

在ORACLE中,可以通过to_char来获得一个星期中的第几天,当然,这个是从星期天开始的(星期天为1),这样就不难理解上面的粗体部分的加上2是什么意思了

当然,上面的SQL还可以用到next_day的一个参数,上面的参数可以这样写了:

SELECT first_name,

     hire_date,

     to_char( next_day(add_months(hire_date,6),'mon') - 7,

         'Day,"the" DDSPTH "of" Month,YYYY'

         ) review

FROM employees;

留意上文的黑色部分,用next_day获取了下一个星期一的日期,减去7就是这个星期的。

但是事实上,我们需要的是下个周一的日期:

SELECT first_name,

     hire_date,

     to_char( next_day(add_months(hire_date,6),'mon'),

         'Day,"the" DDSPTH "of" Month,YYYY'

         ) review

FROM employees;

 

问题二:显示员工的姓氏、聘用日期和该员工在星期几开始工作的,将该列标记为DAY,按照星期中个天的顺序进行排序(星期一为第一天)

其实这个问题的关键点在于,在ORACLE中,星期天才是第一天,如果安装1-7的序号来排序的话,星期天是肯定在第一个的,那么我们要怎么做到将其拍到尾部,接下来看下面的SQL:

SELECT first_name,

       hire_date,

       DAY

FROM (

     SELECT first_name,

            hire_date,

            to_char(hire_date,'DAY') DAY,

            CASE to_char(hire_date,'D')

                WHEN '1' THEN '8'

                ELSE to_char(hire_date,'D')

            END NUM

     FROM employees

     ORDER BY NUM

)

可以看到,在内层查询中,我们将星期天的代码替换成了8,然后再排序的话,星期天就能排在了星期六的后面了,多奇特!

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24213977/viewspace-1115761/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-07-08