2015-02-06 123 views
1

我试图检索数据进行统计,即时通讯使用MySQL和我不能得到以下功能工作 - PostgreSQL工作。date_trunc PostgreSQL函数相当于mySQL

我想检索上个月的请求并计算每天新请求的数量。

PostgreSQL的

SELECT count(*), date_trunc('day', created_at) as date FROM requests 
WHERE(created_at > '2014-08-13 00:00:00') GROUP BY 2 ORDER BY 2 ASC; 

的MySQL - 我的代码*

SELECT count(EXTRACT(DAY FROM created_at)), EXTRACT(DAY FROM created_at) as date 
FROM `requests` 
WHERE EXTRACT(DAY FROM NOW() - INTERVAL 1 MONTH) 
GROUP BY date 

最终代码

SELECT count(*) , date(created_at) AS date 
FROM `requests` 
WHERE DATE(created_at) > DATE(DATE_SUB(NOW() , INTERVAL 1 MONTH)) 
GROUP BY date 

回答

3

相当于为您的情况是date()

select date(created_at), count(*) 
from requests 
. . . 

这不是一般的替代品,但它的工作原理去除日期的时间部分。

编辑:

也许对于这两个数据库更好的解决方案是:

select cast(created_at as date) 

这是ANSI标准,并在这两个数据库的工作(以及SQL服务器)。我个人一般不会使用它,以免我在Oracle中意外地使用它,导致很难发现错误。 (date在Oracle中有一个时间部分,唉。)

+1

这也适用于Postgres – 2015-02-06 12:53:06

+1

'cast()'会使它甚至与ansi兼容。 – pozs 2015-02-06 12:58:14

+0

@pozs。 。 。 'cast()'在MySQL中工作,但它不适用于所有数据库。值得注意的是,Oracle'date'类型包含一个时间组件。 – 2015-02-06 13:01:16