2017-12-05 22 views
0

私は列を日付に変換し、現在の月と列の月を比較する必要があります。oracleは現在の日付と日付を比較します

列は次のようになります。

Date 
0117 
0217 
0317 
.. 

私はそれを変換する方法を知っているが、それを比較傾けます。

select date,to_date(date, 'mmyy') 
from table 
where ???? 

+0

は何ですか代表する日? –

答えて

0

あなたはto_date()を使用して日付に値を変換することができます:私はそれが含まれているものを明確にするために、列mmyyに改名

select to_date(mmyy, 'MMYY') 
from t; 

注意。

これは、月の最初の日を返します。

to_date()の結果は、現在の日付と比較することができます。

where to_char(to_date(mmyy, 'MMYY'), 'YYYY-MM') = to_char(sysdate, 'YYYY-MM') 

または、より簡単に:

あなたが月にすべてを一致させたい場合は

where to_date(mmyy, 'MMYY') = trunc(sysdate) 

は、単に適切な比較を使用します。たとえば、月の日付の最初にマッチします

+0

あなたの答えをありがとうが、私はすべてのレコードが1ヶ月間から表示されるように月を比較したいです。 – on55

+0

'trunc(sysdate)'は、月の初めではなく、1日の始まりに切り詰められますので、その月の最初の日にクエリを実行した場合にのみ動作します。 – MT0

+0

@ MT0。 。 。その月の初めは 'to_date()'への変換が日付を月の初めにするためです。 'TRUNC'のデフォルトが 'TRUNC(datevalue、' DD ')であるため、クエリーが月の最初の日に実行されない限り、to_date(mmyy、' MMYY ')= trunc(sysdate)'はどこの行とも一致しません。 –

0

現在の日付を文字列に変換し、文字列の比較を使用できます(これにより、列のインデックスを使用できます)。

SELECT * 
FROM your_table 
WHERE your_date_column = TO_CHAR(SYSDATE, 'MMYY') 

かあなたは(あなたが1を作成した場合、あなたの列にインデックスを使用することはありませんが、関数ベースのインデックスを使用することができた)日付に列を変換し、それを比較することができます

SELECT * 
FROM your_table 
WHERE TO_DATE(your_date_column, 'MMYY') = TRUNC(SYSDATE, 'MM') 
+0

月をintとして取得する方法はありますか?現在の日付の場合は12です。 – on55

+0

@ on55 'EXTRACT(MONTH FROM SYSDATE)' – MT0

関連する問題