2011-07-07 25 views
1

Oracleでは、列タイプ= DATEの表に列(dateColumn)があり、select * from table. を実行すると特定のレコードの値が'10/03/2010 'として表示されます今、私がするとき:Oracleクエリで日付が正しく表示されない

SELECT * 
    FROM table 
WHERE dateColumn < '01-JAN-11' 

何も表示されません。私がするとき:

SELECT * 
    FROM table 
WHERE dateColumn > '01-JAN-11' 

レコードが表示されます。 これはなぜこのように動作していますか? 「2010年10月3日」そうはっきりとそれが< 01である2010年3月10日で月2011年

+0

nls_date_format = 'mm/dd/yyyy'というコマンドで設定したい特定の日付形式を設定すると便利です。 – dave

答えて

7

決定的な日付形式はありません - それは地域によって異なる場合がありますまたはビジネスです。それは、日付などの文字列を評価する手段がTO_DATE functionを使用する必要があり、...でも、SQLを考慮せずに、Oracleでは

現実です:

SELECT * 
    FROM table 
WHERE dateColumn > TO_DATE('01-JAN-11', 'DD-MON-YY') 

Oracleを指示する書式マスクを指定する必要がありますあなたがそれを供給している日付をどのように解釈するか。

この機能は他のデータベースでは異なる場合がありますが、それ以外は同じです。ほとんどのデータベースは、文字列を日付に暗黙的に変換するために 'YYYY-MM-DD'を受け入れます。明示的な変換は、TO_DATEのような関数を使用して明示的にデータ型を変更する場合です。

+0

+1教訓的な答えについて –

+0

SQLが関数の中にあって、関数を呼び出す必要があります。日付を入力として渡す必要があります。それは私のためには機能しません。だから私は:SELECT * テーブルから where dateColumn> TO_DATE(inputDate、 'DD-MON-YY');そして私はそれを入力日付と呼ぶ。それは私に構文エラーを与える – Victor

+2

@ Kaushik:パラメータ 'inputDate'のデータ型は何ですか?私はあなたに尋ねた質問ではない、「日付」の賭けをします。私は人々が細部を隠すことが良い考えだと思う理由を理解できません... –

1

TO_DATEを使用してみてください:

select * from table where dateColumn < to_date('01-JAN-11', 'dd-MON-YY') 
+1

「mm」は数値の月のため「mm」を「MON」に変更しました。 –

関連する問題