sql - CURRENT_TIMESTAMP 和 CURRENT_DATE 之间的区别

标签 sql postgresql date timestamp

我想获取过去 28 天的数据,并且只包括完整的天数。所以我的意思是,当我今天上午10:00查看数据时,它只包括昨天(完成的一天)和前28天的数据。

我正在用这样的数字创建一个实时仪表板。所以我不希望数字在一天结束之前发生变化。

此外,我愿意了解 CURRENT_DATECURRENT_TIMESTAMP 之间的区别

例如,在我的代码中,如果我使用CURRENT_TIMESTAMP,我会得到从今天上午 10:00 到 28 天前上午 10:00 的数据吗?如果没有,我如何根据每次运行代码时数字实时变化的方式获取数据(数据库中数据变化的平均时间为 10 分钟)。

我的简化代码:

select count(id) from customers 
where created_at > CURRENT_DATE - interval '28 days'

也许我使用了错误的代码,你能给我一些关于如何以两种格式获取日期的建议吗:

  1. 只包括完整的天数(不包括今天,直到那天 完成)
  2. 包括时间,从今天早上到前 28 天 早上的时间。

最佳答案

假设 created_attimestamptz 类型。

  1. include only complete days(does not include today, until the day is finished)

now() 开始并使用 date_trunc() :

SELECT count(*)
FROM   customers 
WHERE  created_at <  date_trunc('day', now())
AND    created_at >= date_trunc('day', now() - interval '28 days');

或者使用 CURRENT_DATE ...

WHERE  created_at <  CURRENT_DATE
AND    created_at >= CURRENT_DATE - 28;

两者的结果取决于当前的 timezone 设置。 “日期”在功能上取决于您当前的时区。类型timestamp with time zone (timestamptz) 没有。但是表达式 date_trunc('day', now()) 引入了与“day”相同的依赖项,该依赖项由您当前的时区定义。因此,您需要准确定义您指的是哪些“天”。基础知识:

您可以从 date 中减去 integer 值以减去天数:

now()CURRENT_TIMESTAMP 的缩写。见:

count(*) 等同于 count(id)id 被定义为 NOT NULL,但是快一点。

  1. include hours, from today morning until 28 days back same time in the morning.

简单地:

WHERE  created_at > now() - interval '28 days'

不依赖于当前时区。

关于sql - CURRENT_TIMESTAMP 和 CURRENT_DATE 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57469642/

相关文章:

python - 通过 python 将空白单元格保持为空白而不是无

php - 如何在 php 中从特定时间之前的表中选择行?

c - PostgreSQL:如何获取C扩展函数中的参数?

arrays - 如何替换 PostgreSQL 中文本列中的字符数组?

mysql - 多种条件下的独特值(value)

mysql - 通过具有良好性能的唯一列选择多行

sql - 如何使 MySQL MAX() 将 NULL 视为最小可能值?

python - 获取python中两个日期之间日期的星期数

java - 设置 java.util.Calendar future 日期

java - 如何更改当前日期