デートがあります。日付が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月から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;
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 - 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
これを試してください。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