我有一个比较 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
执行所有操作,您只对一个值进行处理。
此外,如果您操纵了offer_date
您将无法在该字段上使用任何索引,因此强制扫描而不是搜索。
我错过了什么吗? 您可以在比较中转换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