2

我正在寻找一种解决方案,以使用 mySQL 查找自一个(或多个)整周(7 天)以来创建的每个结果。

我试过这个,但有时结果似乎是错误的,因为每周有不止一个结果。

SELECT *
FROM `datatable`
WHERE MOD(TIMESTAMPDIFF(DAY,UNIX_TIMESTAMP(created),NOW()),7)=0;
  • created 是一个时间戳。

感谢您的任何回复!

4

3 回答 3

1

尝试这个:

SELECT 
    *
FROM 
    `datatable`
WHERE 1 
    AND `created` >= DATE_FORMAT(NOW() - INTERVAL 7 DAY,'%Y-%m-%d 00:00:00')
    AND `created` <= DATE_FORMAT(NOW() - INTERVAL 7 DAY,'%Y-%m-%d 23:59:59')
于 2013-04-17T08:37:11.653 回答
0

据我了解的问题,您想要的记录比 a certainDate新,并且不超过 7 天,或 14 天,...,140 天(以最接近于当前的certainDate 为准)日期。

如果我理解正确,以下可能对您有用certainDate = '2013-04-01 00:00:00'

SELECT *
FROM `datatable`
WHERE `created` >= ADDDATE(
                    '2013-04-01 00:00:00', 
                    INTERVAL MOD(ABS(TIMESTAMPDIFF(DAY, NOW(), '2013-04-01 00:00:00')),7) DAY
                  )

此查询将获取created过去 14 天内的所有结果。

于 2013-04-17T09:18:19.827 回答
0
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

如果不带参数调用,则返回 Unix 时间戳(自 '1970-01-01 00:00:00' UTC 以来的秒数)作为无符号整数。如果使用日期参数调用 UNIX_TIMESTAMP(),它返回参数的值作为自 '1970-01-01 00:00:00' UTC 以来的秒数,日期可以是 DATE 字符串、DATETIME 字符串、TIMESTAMP 或格式为 YYMMDD 或 YYYYMMDD 的数字。服务器将日期解释为当前时区的值,并将其转换为 UTC 的内部值。客户端可以按照http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html中的描述设置他们的时区 。

所以,不要使用UNIX_TIMESTAMP()函数,而要简单DATE()

于 2013-04-17T08:25:31.287 回答