如何获取昨天的日期从 Vertica SQL 中的 00:00:00 开始

How to get yesterday date starts at 00:00:00 in Vertica SQL

如何在 Vertica SQL 中获取昨天开始于 00:00:00 的日期?

一般在SQL服务器中是这样的 SELECT DATEADD(日, -1, DATEDIFF(日, 0, GetDate())) 2021-01-31 00:00:00.000

在 Vertica 中怎么样?

我显然会更接近 ANSI 标准。有一个ANSI保留字CURRENT_DATE,它是returns今天的日期(不带时间)的表达式。许多 DBMS 都支持它(我实际上也认为 SQL 服务器);如果我需要时间戳,我会坚持这一点 - 或者 CURRENT_TIMESTAMP。 “如果可以避免,切勿使用 DBMS 细节”。

在 Vertica 中,您可以从日期中减去整数或将整数添加到日期中。您不能使用 SQL-服务器特有的 DATEADD(),但您可以使用更标准的(在其他 DBMS 中)TIMESTAMPADD(),其工作方式类似于 DATEADD() 和 returns时间戳。

为了完整起见:如果您的结果时间戳不是 '00:00:00' 作为时间元素,请使用 TRUNC(<timestamp>) 截断该值并获得时间为零的时间戳。

SELECT 
  CURRENT_DATE   AS ANSI_CURRENT_DATE
, CURRENT_DATE-1 AS yesterday_midnight_minus
, TIMESTAMPADD(DAY,-1,CURRENT_DATE) AS tsadd
;
-- out  ANSI_CURRENT_DATE | yesterday_midnight_minus |        tsadd        
-- out -------------------+--------------------------+---------------------
-- out  2021-02-01        | 2021-01-31               | 2021-01-31 00:00:00