【问题标题】:Trying to get Month and Day of last year, and year before data试图获取去年的月份和日期,以及数据的前一年
【发布时间】:2015-05-19 21:57:43
【问题描述】:

在这里,我构建了一个查询,用于检索从今天到 11 个月前的保单到期日期。

由于此查询确实检索数据,因此我需要更改查询以从当前日期检索 1 年前和之前一年的数据。

例如,我需要在 2013 年 5 月 19 日和 2014 年 5 月 19 日之间过期的保单。

我正在尝试使用 between 函数调用,但不知道如何实现它。

这是我目前的数据,如下所示:

Customer Number| Name | EMail | Producer | Policy Expired

abcde-12345-fghij-67890 | Bob Builder | somewhere@email.com | 31000 | Dora Explorer | 2014-07-29
abcde-12345-fghij-67890 | Bob Builder | somewhere@email.com | 31000 | Dora Explorer | 2014-08-07
abcde-12345-fghij-67890 | Bob Builder | somewhere@email.com | 31000 | Dora Explorer | 2014-08-10

  SELECT DISTINCT   
                Customer.custno as [Customer Number], 
                CONCAT(Customer.FirstName, ' ', Customer.LastName) AS Name, 
                Customer.EMail,
                (isnull(Employee.Firstname + ' ','') + isnull(Employee.LastName,'')) AS Producer,
                BasicPolInfo.polexpdate as [Policy Expired]

  FROM 
                Customer INNER JOIN
                BasicPolInfo ON Customer.CustId = BasicPolInfo.CustId INNER JOIN
                Transaction ON BasicPolInfo.PolId = Transaction.PolId INNER JOIN
                GeneralLedgerBranch ON Customer.GLBrnchCode = GeneralLedgerBranch.GLBrnchCode INNER JOIN
                GeneralLedgerDepartment ON Customer.GLDeptCode = GeneralLedgerDepartment.GLDeptCode INNER JOIN
                GeneralLedgerDivision ON Customer.GLDivCode = GeneralLedgerDivision.GLDivCode INNER JOIN
                Employee ON BasicPolInfo.ExecCode = Employee.EmpCode

  WHERE 
                Customer.firstname IS NOT NULL 
                AND Customer.EMail IS NOT NULL 
                AND Customer.Active = 'Y' 
                AND Customer.typecust = 'P'
                AND BasicPolInfo.PolExpDate >= DATEADD(MONTH, -10,CONVERT(VARCHAR(11),GETDATE(),106))               
                AND BasicPolInfo.PolExpDate <= CONVERT(VARCHAR(11),GETDATE(),106) 
                AND BasicPolInfo.status <> 'D'
                AND GeneralLedgerDepartment.Name = 'Personal -'

  ORDER BY      BasicPolInfo.PolExpDate ASC

以上,我正在尝试翻译

AND BasicPolInfo.PolExpDate >= DATEADD(MONTH, -10,CONVERT(VARCHAR(11),GETDATE(),106))
AND BasicPolInfo.PolExpDate

进入 2013 年 5 月 19 日至 2014 年 5 月 19 日之间。我该怎么办?

我在网上查了一下,但无法得出结论。

【问题讨论】:

    标签: sql sql-server between


    【解决方案1】:

    如果 BasicPolInfo.PolExpDate 是 DATE 数据类型,那么它就像

    AND BasicPolInfo.PolExpDate BETWEEN 
      DATEADD(YEAR, -2, GETDATE()) 
      AND DATEADD(YEAR, -1, GETDATE())
    

    如果您的数据类型是 DATETIME 并且您需要去除时间部分,则使用

    AND BasicPolInfo.PolExpDate BETWEEN
      DATEADD(YEAR, -2, DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))) 
      AND DATEADD(YEAR, -1, DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多