如何查询日期的时间是从1月到6月以及7月到12月

时间:2012-11-28 06:48:42

标签: sql oracle11g

我有个约会。我想检查日期是在1月到6月还是7月到12月之间。如果用户输入输入日期28-NOV-12,那么如何检查该日期是否在7月到12月之间?如果用户输入日期28-FEB-12那么这个日期介于1月到6月之间?基本上我想半年检查日期?

谢谢

4 个答案:

答案 0 :(得分:1)

select sign(2.5-to_char(<date>, 'q')) from dual;

为1月1日至6月30日之间的日期返回1,否则返回-1

<强>解释

to_char(date, 'q')返回日期年度(1,2,3,4; 1月 - 3月= 1)see format models )。 11月28日那将是4。

2.5-quarter返回第3季度和第4季度的负数,以及第1季度和第2季度的正数。 sign将负数和正数减少为更简单的-11

<强>测试用例

with da as (
  select date '2012-01-01' te from dual union all
  select date '2012-02-02' te from dual union all
  select date '2012-03-03' te from dual union all
  select date '2012-04-04' te from dual union all
  select date '2012-05-05' te from dual union all
  select date '2012-06-06' te from dual union all
  select date '2012-07-07' te from dual union all
  select date '2012-08-08' te from dual union all
  select date '2012-09-09' te from dual union all
  select date '2012-10-10' te from dual union all
  select date '2012-11-11' te from dual union all
  select date '2012-12-12' te from dual
)
select 
  da.te,
  decode (sign(2.5-to_char(da.te, 'q')),
           1, 'Jan-Jun',
          -1, 'Jul-Dec')
from da;

答案 1 :(得分:0)

select * from table "28-NOV-2012" WHERE date_column  between TO_DATE('01-JAN-2012') AND TO_DATE('01-JUN-2012');

答案 2 :(得分:0)

尝试to_char function,例如这样:

select
    case
        when to_char(date_column, 'mm') <= 6 then '1st' 
        when to_char(date_column, 'mm') >= 7 then '2nd'
    end as half_of_the_year
from your_table

to_char(date_column, 'mm')返回月份(01..12,01 - 1月)部分日期。

select
    case
        when to_char(sysdate, 'mm') <= 6 then '1st' 
        when to_char(sysdate, 'mm') >= 7 then '2nd'
    end as half_of_the_year
from dual
今天

返回:

HALF_OF_THE_YEAR
2nd

答案 3 :(得分:0)

试试这个,date_column应该是date数据类型,其他明智的改变为TO_DATE(date_column)

select
case
    when date_column BETWEEN  TO_DATE('01-JAN-12') AND TO_DATE('03-JUN-12')then '1st Half' 
    ELSE '2nd Half'
end as DatePosition
from table_name