0

我正在尝试获取类似于date_truncpsql 中的 mysql 查询。

不幸的是 Mysql 没有date_trunc功能,我发现我可以在 Mysql 中使用 extract 代替。

我想要做的是编写一个脚本,我将在每小时 10 分钟后运行它,但我只想选择从一个小时开始到这个小时结束的数据。

例如,我将运行脚本 12:10,我想显示从 11:00:00 到 11:59:59 的数据。

在 PSQL 查询中看起来像这样:

SELECT * 
FROM data 
WHERE time > ( date_trunc('hour',now()) - interval '1 hour' ) 
AND time <= ( date_trunc('hour',now()) ) ORDER BY time;

我试图以类似的方式使用提取,但我没有返回任何行或错误:/

下面的查询返回例如一些缩小的数据,但从数据库启动的第一天开始,每天 2 小时,而不仅仅是最后一个小时:

SELECT * 
FROM data 
WHERE extract(hour from cr_date) between extract(hour from now()) - interval 1 hour) 
AND extract(hour from now()) 
ORDER BY cr_date;

有什么想法可以实现吗?或者我在这个查询中做错了什么?

4

1 回答 1

1

Hour 只是一个整数,因此无论日期如何,它都会查找 9 和 10 之间的任何匹配项。

我会推荐

select * FROM data 
where cr_date >= date(now()) + INTERVAL hour(now())-1 HOUR
  and cr_date <= date(now()) + INTERVAL hour(now()) HOUR

date(now()) 返回午夜,hour(now()) 返回自午夜以来的小时数

因此,在上午 11:10,它应该会在午夜 + 10 小时(上午 10 点)和午夜 + 11 小时(上午 11 点)之间产生结果

于 2013-08-14T14:26:18.687 回答