我有个约会。我想检查日期是在 1 月到 6 月还是 7 月到 12 月之间。就像假设如果用户输入输入日期 28-NOV-12 那么我如何检查该日期是否介于 7 月到 12 月之间?如果用户输入日期 28-FEB-12 那么这个日期介于 1 月到 6 月之间?基本上我想每半年检查一次日期?
谢谢
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
负数和正数简化为更简单的-1
和1
。
测试用例:
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;
select * from table "28-NOV-2012" WHERE date_column between TO_DATE('01-JAN-2012') AND TO_DATE('01-JUN-2012');
尝试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 - 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
试试这个,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