代码之家  ›  专栏  ›  技术社区  ›  Silver Light

mysql:查询中周日期的范围是周数

  •  6
  • Silver Light  · 技术社区  · 14 年前

    我有一个类似这样的数据库表:

    | id         | clock         | info
    ----------------------------------------------
    | 1          | 1262556754    | some info
    | 2          | 1262556230    | some other info
    | 3          | 1262556988    | and another
    | 4          | 1262555678    | and some more
    

    它包含日志记录和一个Unix时间戳。我需要的是得到一份周报,关于每周有多少日志记录。下面是我写的一个查询:

    SELECT
        DATE_FORMAT(FROM_UNIXTIME(clock), "%U") AS week
    count(*) as cnt
    FROM logs
    WHERE DATE_FORMAT(FROM_UNIXTIME(clock), "%Y") = '2010'
    GROUP BY week
    

    结果如下:

    | week       | cnt
    -------------------------------
    | 1           | 55 
    | 2           | 134   
    | 4           | 765
    | 20          | 65
    

    伟大的!但是我想看到的是日期范围 08 Feb 2010 00:00 - 15 Feb 2010 00:00 ,所以我的结果集如下所示:

    | day_start           | day_end           | cnt
    ---------------------------------------------------------
    | 08 Feb 2010 00:00   | 15 Feb 2010 00:00 | 55 
    | 15 Feb 2010 00:00   | 22 Feb 2010 00:00 | 76
    | 22 Feb 2010 00:00   | 01 Mar 2010 00:00 | 756
    

    有什么办法吗?

    2 回复  |  直到 11 年前
        1
  •  6
  •   igelkott    14 年前

    使用 STR_TO_DATE('201008 Monday', '%X%V %W'); 找个合适的约会 2010-02-22 然后使用 DATE_FORMAT 以获得所需的格式。

        2
  •  3
  •   nsmyself    14 年前

    如果该“周”列存储了一年内给定周的数量,您可以使用makedate函数将其转换为日期字符串。

    例如:

    select makedate(2010, week * 7);
    

    它应该是有效的,因为您的报告是特定于年份的。 干杯