1

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

谢谢

4

4 回答 4

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

返回1日期为 1 月 1 日至 6 月 30 日或-1其他日期。

说明

to_char(date, 'q')返回日期的一年中的季度1、2、3、4;一月 - 三月 = 1)请参阅格式模型)。对于 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;
于 2012-11-28T07:25:53.390 回答
0
select * from table "28-NOV-2012" WHERE date_column  between TO_DATE('01-JAN-2012') AND TO_DATE('01-JUN-2012');
于 2012-11-28T06:58:09.420 回答
0

尝试to_charfunction,例如这样:

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 - January) 部分。

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
于 2012-11-28T07:04:27.617 回答
0

试试这个,date_column 应该是日期数据类型,否则明智地更改为 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
于 2012-11-28T07:15:35.820 回答