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のようなものです。
このクエリを適応させる必要があるアイデアはありますか?
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を強制します。
私は何かが足りないのですか?比較で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