我有个约会。我想检查日期是在1月到6月还是7月到12月之间。如果用户输入输入日期28-NOV-12,那么如何检查该日期是否在7月到12月之间?如果用户输入日期28-FEB-12那么这个日期介于1月到6月之间?基本上我想半年检查日期?
谢谢
答案 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
将负数和正数减少为更简单的-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;
答案 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