【问题标题】:Parsed date in where clause在 where 子句中解析日期
【发布时间】:2021-05-06 18:22:13
【问题描述】:

如何在where 子句中使用已解析的日期与 2 个表 f.e

SELECT *
FROM companies
INNER JOIN acquisitions ON companies.id = acquisitions.company_id
WHERE companies.created_at >= acquisitions.delivery_date
    

companies.created_at 是日期列,acquisitions.delivery_date 是日期时间列。

如果我这样做,则跳过一条记录

companies.created_at = '2021-04-16'
acquisitions.delivery_date = '2021-04-16 10:00:00'

我们看到delivery_date 不大于created_at 但两者都在同一天。那么如何解析到日期然后进行比较,我尝试过 date(acquisitions.delivery_date)cast(acquisitions.delivery_date as DATE) 并没有工作

【问题讨论】:

  • WHERE Companies.created_at >= DATE(acquisitions.delivery_date) 必须有效。请参阅 SELECT '2021-04-16' >= date('2021-04-16 10:00:00')

标签: mysql sql


【解决方案1】:

https://www.db-fiddle.com/f/jB1PyysytiusorEJoHuwx8/0

SELECT *
  FROM companies
  INNER JOIN acquisitions
    ON companies.id= acquisitions.company_id
 WHERE companies.created_at >= date(acquisitions.delivery_date);

【讨论】:

    【解决方案2】:
    SELECT *
      FROM companies
      INNER JOIN acquisitions
        ON companies.id= acquisitions.company_id
     WHERE companies.created_at + INTERVAL 1 DAY > acquisitions.delivery_date
    

    我更喜欢这种变体,因为companies 中的行数必须小于acquisitions 中的一个。因此查询会比WHERE companies.created_at >= DATE(acquisitions.delivery_date) 稍快。

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2012-06-24
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多