【问题标题】:How to go back two days from a date in sql?如何从sql中的日期返回两天?
【发布时间】:2021-03-20 01:57:36
【问题描述】:

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

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

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

我尝试使用 NOW()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

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 这是一个直接集成在我的 POS 软件中的 SQL 监视器
  • @Patrick62: (1) 日期函数是特定于数据库的。您需要弄清楚您正在运行的数据库产品。运行select version() 会发生什么? (2)GP_HEURECREATION列的数据类型是什么?
  • sql 监视器和您的软件可以使用任何 dbms,是 MYSQL 、 Postgres 、 Oracle 还是 Microsoft SQL server?
  • GP_HEURECREATION 列的类型为 DATE。我不确定我的数据库的类型,如何通过查询知道它? @GMB

标签: sql sql-server datetime where-clause date-arithmetic


【解决方案1】:

现有查询的语法建议使用 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()))

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2011-11-05
    • 2021-04-14
    • 2016-06-15
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多