在SQL oracle中的某个给定日期之后查找特定日期。

时间:2011-07-28 15:34:18

标签: sql oracle datetime

在SQL oracle中的某个给定日期之后查找特定日期。

实施例: 雇员加入日期= 1980年12月17日。

我希望在加入日期后的第一个2月1日开始时获得日期和日期和时间。

3 个答案:

答案 0 :(得分:3)

一个选项是

add_months( trunc( add_months(<<your date>>,-1),'YYYY'), 13 )

SQL> ed
Wrote file afiedt.buf

  1  select add_months( trunc( add_months( date '1980-02-17', -1 ), 'YYYY'), 13
)
  2*   from dual
SQL> /

ADD_MONTH
---------
01-FEB-81

SQL> ed
Wrote file afiedt.buf

  1  select add_months( trunc( add_months( date '1980-01-17', -1 ), 'YYYY'), 13
)
  2*   from dual
SQL> /

ADD_MONTH
---------
01-FEB-80

SQL> ed
Wrote file afiedt.buf

  1  select add_months( trunc( add_months( date '1980-12-17', -1 ), 'YYYY'), 13
)
  2*   from dual
SQL> /

ADD_MONTH
---------
01-FEB-81

答案 1 :(得分:0)

你可以尝试:

select add_months(trunc( date '1980-12-17' - 32, 'YEAR') + 31, 12)
from dual

在此查询中,32是2月1日内的一天中的数字。它可以适用于1月和2月的其他日期,但由于闰年的违规行为,不适用于当年晚些时候的目标日期。 / p>

答案 2 :(得分:0)

我做的有点不同,但这似乎比add_months方法更清晰:

SELECT
    employee_join_date
  , CASE
        WHEN extract(MONTH FROM employee_join_date) >= 2
            THEN to_date(extract (YEAR FROM employee_join_date)+1 || '0201', 'yyyymmdd')
        ELSE to_date(extract (YEAR FROM employee_join_date) || '0201', 'yyyymmdd')
    END AS following_feb_1
FROM
    YOUR_TABLE;

请注意,如果员工于2月1日被聘用,则会在下一年的2月1日返回。如果您不希望仅使用“&gt; 2”而不是“&gt; = 2”。