首页 > 解决方案 > 如何从sql中的日期返回两天?

问题描述

我编写了一个 SQL 查询,可以让我获得某些商店的销售额。我的查询每天早上运行,我想在运行时获取 2 天前的销售额。

例如,如果我的查询在 08/12 明天早上运行,我希望列中的值"GP_HEURECREATION"以“20200612”开头的销售额,以获取全天的所有销售额。

GP_HEURECREATION列的格式如下:"20200612 00:00:00"并且属于DATE类型。

我尝试使用NOW()and DATEADD(),但例如,我有 2018 年的值。如何在查询执行前两天获取值?

SELECT 
    T_ETABLISSEMENT, ET1.ET_LIBELLE AS C1, GL_ETABLISSEMENT, 
    GP_HEURECREATION, GP_REFINTERNE, GL_CODEARTICLE, 
    LIBDIM2, LIBDIM1, GL_QTEFACT, GL_PUTTC, 
    (GL_TOTALHT * GP_COTATIONDOS) AS TOTALHTDEV, GL_DPR, GL_DEVISE, 
    GL_NATUREPIECEG, GA_LIBELLE 
FROM 
    GCLIGNEARTDIM  
LEFT OUTER JOIN 
    PGI_LOOKUP(TTETABLISSEMENT) ET1 ON GL_ETABLISSEMENT = ET1.ET_ETABLISSEMENT 
WHERE 
    (GP_HEURECREATION <= DATEADD(day, -2, GETDATE())
    AND (GL_NATUREPIECEG = "FFO") 
    AND GL_ETABLISSEMENT = "20897", "10519", "20267", "26451", "20269", "26078", "28047", "20900", "28085", "24984", "27113", "20268", "19994", "28450", "26876", "24063", "18066", "3220"
ORDER BY 
    GP_REFINTERNE

标签: sqlsql-serverdatetimewhere-clausedate-arithmetic

解决方案


您现有查询的语法建议使用 SQL Server。如果您想要属于第 -2 天的记录,您可以执行以下操作:

where gp_heurecreation >= dateadd(day, -2, convert(date, getdate()))
  and gp_heurecreation <  dateadd(day, -1, convert(date, getdate()))

如果gp_heurecreation没有时间组件(在 SQL Server 中,这是一种date数据类型),则更简单:

where gp_heurecreation = dateadd(day, -2, convert(date, getdate()))

推荐阅读