web-dev-qa-db-ja.com

日付形式のOracle SQLクエリ

私は常にOracle SQLクエリの日付形式と混同し、数分一緒にグーグルに費やします、データベーステーブルに日付の異なる形式がある場合に誰かが私に取り組む最も簡単な方法を説明できますか?

たとえば、私はES_DATEとして日付列を持ち、データ型TIMESTAMP(6)WITH LOCAL TIME ZONEの27-APR-12 11.52.48.294030000 AMとしてデータを保持します。

enter image description here

その特定の日のデータを取得する単純な選択クエリを作成しましたが、何も返されません。誰かが私を説明できますか?

select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')

または

select * from table where es_date = '27-APR-12';
20
user2246725

to_date()は00:00:00の日付を返すため、比較する日付から分を「削除」する必要があります。

select * 
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')

もしあなたが定期的にやっているのであれば、おそらくtrunc(es_date)にインデックスを作成したいでしょう。

デフォルトの日付形式を別のものに変更すると、リテラル'27-APR-12'は非常に簡単に失敗する可能性があります。したがって、必ず適切なフォーマットマスク(またはANSIリテラル:date '2012-04-27')でto_date()を使用するようにしてください。

to_date()を正しく使用し、暗黙のデータ型変換に依存していませんでしたが、to_date()の使用には、'dd-MON-yy'の形式のため、微妙な落とし穴があります。

別の言語設定では、これは簡単に失敗する可能性があります。 TO_DATE('27-MAY-12','dd-MON-yy') NLS_LANGがドイツ語に設定されている場合。異なる言語では異なる可能性のある形式のファイルは避けてください。 4桁の年と数字のみを使用する(例: 'dd-mm-yyyy'または'yyyy-mm-dd'

42

同じ日付形式を使用しており、Oracleの日付の選択クエリがある場合:

   select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015';

Oracleが提供するTo_DATE

2