SQL Server 如何从开始日期和结束日期在 6 个月前的表中进行选择

reu*_*own 1 sql-server

所以我有一个表,其中包含以下 select 语句中列出的一些列。

SELECT [AccountName], 
       [AccountNumber], 
       [Tenor], 
       [Currency], 
       [TotalCredit], 
       [TotalDebit], 
       [CreditCount], 
       [DebitCount], 
       [AccountBalance], 
       [StatementStartDate], 
       [StatementEndDate] 
  FROM [TAF.EligibilityService].[dbo].[AccountStatements]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想使用StatementStartDateStatementEndDate选择 6 个月前和今天之间存在的记录。

例如,如果开始日期是 1 年前,只要结束日期还在 6 个月前,就应该返回记录。

提前致谢。

Vla*_*sak 8

这将一个已知值 , 包装GETDATE()在一个函数中,该函数只需要一次计算,而不是将列包装在一个函数中,这将需要对每一行的计算进行评估。

SELECT [AccountName], 
       [AccountNumber], 
       [Tenor], 
       [Currency], 
       [TotalCredit], 
       [TotalDebit], 
       [CreditCount], 
       [DebitCount], 
       [AccountBalance], 
       [StatementStartDate], 
       [StatementEndDate]   
  FROM [TAF.EligibilityService].[dbo].[AccountStatements]
 WHERE StatementStartDate >= dateadd(month, -6, getdate())
    OR StatementEndDate>= dateadd(month, -6, getdate());
Run Code Online (Sandbox Code Playgroud)

根据索引、数据大小和性能需求,将其拆分OR为两个UNION语句可能是下一步。就像是:

SELECT [AccountName], 
       [AccountNumber], 
       [Tenor], 
       [Currency], 
       [TotalCredit], 
       [TotalDebit], 
       [CreditCount], 
       [DebitCount], 
       [AccountBalance], 
       [StatementStartDate], 
       [StatementEndDate]   
  FROM [TAF.EligibilityService].[dbo].[AccountStatements]
 WHERE StatementStartDate >= dateadd(month, -6, getdate())
UNION ALL
SELECT [AccountName], 
       [AccountNumber], 
       [Tenor], 
       [Currency], 
       [TotalCredit], 
       [TotalDebit], 
       [CreditCount], 
       [DebitCount], 
       [AccountBalance], 
       [StatementStartDate], 
       [StatementEndDate]   
  FROM [TAF.EligibilityService].[dbo].[AccountStatements]
 WHERE StatementEndDate>= dateadd(month, -6, getdate());
Run Code Online (Sandbox Code Playgroud)