5

我要比较 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

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您只需对一个值进行处理。

此外,如果您操纵了offer_date您将无法在该字段上使用任何索引,因此强制扫描而不是搜索。

于 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 回答