【问题标题】:Get week from unix timestamp retrieved from database从数据库中检索到的 unix 时间戳获取星期
【发布时间】:2013-05-28 23:18:40
【问题描述】:

我有一个 MySQL 数据库。在几个表中,存储的信息需要按周检索。所以,我希望能够做一个SELECT FROM *database* WHERE week = *week*。我遇到的问题是星期部分存储为 unix 时间戳(以允许更多用途,例如获取日期和时间,只是时间等......)。

所以问题是:当存储的 date 是 unix 时间戳并且我匹配的 date 不是时,我如何检索此记录 WHERE date = *date*

如果我的问题太令人困惑并且需要改写或以更清晰的方式表达,请发表评论并告诉我。

【问题讨论】:

    标签: php mysql date time


    【解决方案1】:

    MySQL 有一个内置的WEEK() 处理日期的方法:MySQL WEEK() Reference

    不幸的是,MySQL 的 WEEK() 方法仅支持 DATE 数据类型,而不支持 UNIX TIMESTAMP。因此,我们必须首先将时间戳转换为日期,然后才能将该日期传递给 WEEK() 方法:

    SELECT
      *
    FROM
      my_table
    WHERE
      WEEK(
        DATE_FORMAT(
          FROM_UNIXTIME('my_unix_timestamp_col'),
          '%e %b %Y'
        )
      ) = 51
    

    如果您有一列是DATE 数据类型,则可以简化查询(也可以使用索引):

    SELECT * FROM my_table WHERE WEEK(my_date_col) = 51
    

    【讨论】:

    • 为了更简单,我怎样才能以更实用的格式创建日期?
    • 我深入研究了 week 方法,发现它似乎不像我最初想象的那样采用 unix 时间戳。因此,我已经相应地修改了代码。你是对的,用你的 PHP 代码替换 51 来指定当前星期。
    • 为了更简单,我怎样才能以更可用的格式使用日期,以便您的原始代码可以工作? time() 部分无关紧要,它尽可能简单。
    • 我建议不要存储 UNIX_TIMESTAMP,而是使用 DATE 数据类型创建一个列。
    • 此技术将检索每年匹配第 51 周的行。您可能还想匹配年份。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多