タイトルにあるように、クエリを介してSYSDATEから6か月が経過したデータセットを確認する方法を見つけたいと思います。
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
次のことを試しましたが、日付の形式が間違っているというエラーが返されます。ただし、データの挿入では、その日付形式を要求/意図どおりに使用しましたが、問題はありませんでした。
コマンドラインでのエラー:10列:25
ブロッククォート
エラーレポート -
SQLエラー:ORA-01861:リテラルはフォーマット文字列01861と一致しません。00000-「リテラルはフォーマット文字列と一致しません」
*原因:入力のリテラルは、フォーマット文字列のリテラルと同じ長さでなければなりません(先頭の空白を除く)。 「FX」修飾子がオンに切り替えられている場合、リテラルは余分な空白なしで正確に一致する必要があります。
*処置:リテラルに一致するようにフォーマット文字列を修正してください。
クエリ文字列はリテラルであり、日付がDATE
として適切に格納されていると仮定すると、 date literals を使用する必要があります。
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
TO_DATE
を使用する場合(たとえば、クエリ値がリテラルではないため)、US短縮形を使用しているときに NLS_DATE_LANGUAGE パラメーターを明示的に設定することをお勧めします月の名前。そうすれば、一部のローカライズされたOracleインストールで壊れることはありません。
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
to_date()
関数を使用して文字列を日付に変換する必要があります
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
OR
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
OR
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
これは、OrderDate
がDate format
に保存されている場合にのみ機能します。 Varchar
の場合は、その列にto_date()
funcも適用する必要があります。
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');
to_Date()関数を使用して文字列を日付に変換する必要があります! http://www.techonthenet.com/Oracle/functions/to_date.php