0

ExpressionEngine 将日期存储为 int (对此摇头)在数据库中

例如:1382049076 = 2013-10-17

我希望返回在开始日期和结束日期之间有 entry_date 的记录

我尝试使用但不起作用,当我从查询的 WHERE 部分中删除它时,它会检索记录,我觉得我很接近。

DATE_CONVERT('entry_date', '%Y-%m-%d') >= $start_date and DATE_CONVERT('entry_date', '%Y-%m-%d') <= $end_date
4

3 回答 3

2

你有一个 UNIX 时间戳,所以你必须使用from_unixtime函数,例如:

SELECT *
  FROM table
 WHERE DATE_FORMAT(FROM_UNIXTIME(`entry_date`), '%Y-%m-%d') >= $start_date
   AND DATE_FORMAT(FROM_UNIXTIME(`entry_date`), '%Y-%m-%d') <= $end_date 
于 2013-10-22T20:15:34.637 回答
1

1382049076是一个简单的 Unix 时间戳。可以直接在mysql中使用:

SELECT FROM_UNIXTIME(entry_date), ...

它将返回2013-10-17 14:31:16(至少它在我的 UTC-6 时区返回)。

于 2013-10-22T20:13:27.217 回答
1

假设entry_date您的表中有一个整数列,这是一种根据日期选择行的有用方法。

 SELECT whatever
   FROM table
  WHERE entry_date >= UNIX_TIMESTAMP($start_date)
    AND entry_date < UNIX_TIMESTAMP($end_date + INTERVAL 1 DAY)

这里的三个小细节使这个查询运行良好。

一:您的 $start_date 和 $end_date 字符串需要格式化为 'YYYY-MM-DD' 才能正常工作。

二:时间戳可以在天的中间。但是没有时间的日期的时间戳是当天第一秒(即午夜)的时间戳。因此,<(not <=) 和猴子业务与+ INTERVAL 1 DAY日期范围结束。它要求在日期范围结束后的第二天严格小于午夜的任何时间戳。

三:此查询不对entry_date. 这很好,因为它允许使用索引和范围扫描来识别日期范围内的行。

于 2013-10-22T22:06:06.337 回答