web-dev-qa-db-ja.com

Oracle SQLは、日付形式をDD-Mon-YYからYYYYMMに変換します

2つのテーブルの日付を比較する必要がありますが、問題は、一方のテーブルの日付がDD-Mon-YY形式で、もう一方のテーブルの日付がYYYYMM形式であるということです。

比較のために両方をYYYYMMにする必要があります。

私はこのようなものを作成する必要があります:

SELECT * FROM offers 
WHERE offer_date = (SELECT to_date(create_date, 'YYYYMM') FROM customers where id = '12345678') 
AND offer_rate > 0

ここで、create_dateは2006年3月12日のようなもので、offer_dateは200605のようなものです。

このクエリを適応させる必要があるアイデアはありますか?

4
Tom

offer_dateは数値であり、実際の日付よりも精度が低いため、これは機能する可能性があります...
-実際の日付をYYYYMM形式の文字列に変換します
-その値をINTに変換する
-あなたのoffer_dateの結果を比較してください

SELECT
  *
FROM
  offers
WHERE
    offer_date = (SELECT CAST(to_char(create_date, 'YYYYMM') AS INT) FROM customers where id = '12345678')
AND offer_rate > 0 

また、create_dateですべての操作を実行することにより、1つの値に対してのみ処理を実行します。

さらに、offer_dateを操作した場合、そのフィールドのインデックスを利用できなくなるため、SEEKの代わりにSCANを強制します。

3
MatBailie

私は何かが足りないのですか?比較でoffer_dateを変換するだけです。

SELECT *
FROM offers
WHERE to_char(offer_date, 'YYYYMM') = (SELECT to_date(create_date, 'YYYYMM') FROM customers where id = '12345678') AND
      offer_rate > 0 
1
Gordon Linoff