我有个约会。我想确认一下日期是在一月到六月还是七月到十二月之间。例如,假设用户输入日期28-11-12,那么我如何检查此日期是否在7月到12月之间?如果用户输入日期是28-2月12,那么这个日期是在1月到6月之间吗?基本上我想每半年检查一次日期?
谢谢
发布于 2012-11-28 15:04:28
试试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_tableto_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发布于 2012-11-28 15:25:53
select sign(2.5-to_char(<date>, 'q')) from dual;对于介于1月1日和6月30日之间的日期,返回1,否则返回-1。
说明
to_char(date, 'q')返回日期(see format models)的一年中的季度(1,2,3,4;1-3月= 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;发布于 2012-11-28 14:58:09
select * from table "28-NOV-2012" WHERE date_column between TO_DATE('01-JAN-2012') AND TO_DATE('01-JUN-2012');https://stackoverflow.com/questions/13599374
复制相似问题