5

2つのテーブルの日付を比較する必要がありますが、問題は、1つのテーブルの日付がDD-Mon-YY形式で、もう1つのテーブルの日付が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

2 に答える 2

4

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を強制します。

于 2012-05-10T15:11:57.780 に答える
1

私は何かが足りないのですか?比較で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 
于 2012-05-10T14:54:58.933 に答える