【问题标题】:dateadd and between in SQL QuerySQL Query 中的 dateadd 和 between
【发布时间】:2016-10-15 12:52:48
【问题描述】:

我有一个 SQL 查询,提示输入开始日期和结束日期,在 @startdate 和 @enddate 之间。但我想要做的是使用 dateadd / getdate 代码让相同的查询自动从今天的月份向前看 3 个月,但不知道如何整合两者?

【问题讨论】:

  • 请添加示例数据和预期输出
  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。
  • 我们公司有一个基于 Web 的工具,看起来像 Access,并在底部构建 SQL 和验证。这是我正在谈论的示例:其中 vwS_CoPrimPolicy.S_PrimPolicyExpDT 在 "at"startdate 和 "at"enddate 和 vwS_Co.S_CoStatus = 'Customer' 和 vwS_Co.S_CoType = 'Automotive'之间 查询与我们的 Siebel DB 对话。因此,输出是 10 月份所有 7 月份提取的记录列表,即 10/1/16 - 10/31/16。这将每月运行一次,总是提前 90 天。

标签: sql


【解决方案1】:

在 sql-server 中,我假设这是因为您引用了 GETDATE()DATEADD()

DATEADD(MONTH,3,GETDATE())

基于Why is the GETDATE() an invalid identifierEquivalent function for DATEADD() in Oracle的Oracle

ADD_MONTHS(SYSDATE,3)

根据您的评论,如果 Siebel 在 sql-server 上,您将需要

Where vwS_CoPrimPolicy.S_PrimPolicyExpDT Between @startdate And @enddate And vwS_Co.S_CoStatus = 'Customer' And vwS_Co.S_CoType = 'Automotive

成为

where vwS_CoPrimPolicy.S_PrimPolicyExpDT Between 

DATEFROMPARTS(YEAR(DATEADD(MONTH,3,GETDATE())),MONTH(DATEADD(MONTH,3,GETDATE())),1)
    AND DATEADD(DAY,-1,DATEFROMPARTS(YEAR(DATEADD(MONTH,4,GETDATE())),MONTH(DATEADD(MONTH,4,GETDATE())),1))

 And vwS_Co.S_CoStatus = 'Customer' And vwS_Co.S_CoType = 'Automotive

稍微分解一下,因为您实际上是在寻找从今天起 3 个月的月初到从今天起 3 个月后的月底,而这些月份可能是 28、29、30 或 31 天,您实际上需要提前 3 个月找到日期然后得到月初DATEFROMPARTS() 对此很有用。然后在月底,找到 4 个月后的日期并返回一天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2018-11-22
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多