我的表上有一个名为 X 的字段,我存储 unixtime(php -> time())。我的问题是:
如何从我的数据库中列出所有月份,例如:6.2009 8.2009 等。
我的第二个问题是:
如何查询以在同一字段 X(我存储 unixtime)上基于月份和年份列出所有信息,我知道这不起作用,但你可以更好地理解它: where
date
= '06.2009'
有什么解决办法吗?
我的表上有一个名为 X 的字段,我存储 unixtime(php -> time())。我的问题是:
如何从我的数据库中列出所有月份,例如:6.2009 8.2009 等。
我的第二个问题是:
如何查询以在同一字段 X(我存储 unixtime)上基于月份和年份列出所有信息,我知道这不起作用,但你可以更好地理解它: where
date
= '06.2009'
有什么解决办法吗?
列出所有月份:
SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) FROM MyTable;
返回具有给定年份和月份的所有行:
SELECT * FROM MyTable
WHERE EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(X)) = 200906;
要回答您的第一个问题,您可以通过分组来执行此操作:
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;
尝试这个
SELECT FROM_UNIXTIME(X,'%m.%Y') FROM TABLE GROUP BY FROM_UNIXTIME(X,'%m.%Y')
SELECT * FROM TABLE WHERE FROM_UNIXTIME(X,'%m.%Y')='06.2009'
再见