1

我的表上有一个名为 X 的字段,我存储 unixtime(php -> time())。我的问题是:

如何从我的数据库中列出所有月份,例如:6.2009 8.2009 等。

我的第二个问题是:

如何查询以在同一字段 X(我存储 unixtime)上基于月份和年份列出所有信息,我知道这不起作用,但你可以更好地理解它: where date= '06.2009'

有什么解决办法吗?

4

3 回答 3

1
  • 列出所有月份:

    SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) FROM MyTable;
    
  • 返回具有给定年份和月份的所有行:

    SELECT * FROM MyTable
    WHERE EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) = 200906;
    
于 2009-08-20T00:46:44.717 回答
1

要回答您的第一个问题,您可以通过分组来执行此操作:

SELECT FROM_UNIXTIME(timestamp_column, '%c.%Y') AS month, some_other_column FROM table_name GROUP BY month;

至于您的第二个问题,这取决于您要做什么。例如:

SELECT AVG(payment), SUM(*), FROM_UNIXTIME(timestamp_column, '%c.%Y') AS month, some_other_column FROM table_name WHERE timestamp_column BETWEEN UNIX_TIMESTAMP(200906) AND UNIX_TIMESTAMP(200907) - 1 GROUP BY month;

将返回每个组的付款平均值和行数(总和)。

要从特定时间范围内获取未分组的信息,请像这样减少查询:

SELECT payment, some_other_column FROM table_name WHERE timestamp_column BETWEEN UNIX_TIMESTAMP(200906) AND UNIX_TIMESTAMP(200907) - 1;
于 2009-08-20T00:47:16.900 回答
1

尝试这个

  1. SELECT FROM_UNIXTIME(X,'%m.%Y') FROM TABLE GROUP BY FROM_UNIXTIME(X,'%m.%Y')

  2. SELECT * FROM TABLE WHERE FROM_UNIXTIME(X,'%m.%Y')='06.2009'

再见

于 2009-08-20T00:50:22.147 回答