【问题标题】:Date inline code condition subtitute in SQL ServerSQL Server 中的日期内联代码条件替换
【发布时间】:2015-02-24 17:38:50
【问题描述】:

我有一个这样的查询。我想知道日期内联代码条件是否有替代品?

(p.PeriodBeginDate) <= (GETUTCDATE())    
AND DATEADD("dd",180, (p.PeriodEndDate)) >= (GETUTCDATE())  

这是一个示例查询

SELECT 
   r.ReviewRoleID, rpp.*    
FROM 
   dbo.rev_Period_Person AS rpp 
JOIN 
   dbo.rev_Period p ON rpp.PeriodID = p.PeriodID    
LEFT JOIN 
   dbo.rev_Review r ON rpp.PeriodID = r.PeriodID    
                    AND rpp.PersonID = r.RevieweePersonID    
                    AND r.ReviewRoleID = 2    
                    AND r.ReviewSelfAssessmentStatusID = 3    
                    AND r.IsActive = 1    
WHERE
    (p.PeriodBeginDate) <= (GETUTCDATE())    
    AND DATEADD("dd",180, (p.PeriodEndDate)) >= (GETUTCDATE())  

【问题讨论】:

  • 替代/替代:WHERE GETUTCDATE() BETWEEN p.PeriodBeginDate AND DATEADD(DAY, 180, p.PeriodEndDate)

标签: sql sql-server


【解决方案1】:

GETUTCDATE() 介于 (p.PeriodBeginDate) 和 DATEADD("dd",180, (p.PeriodEndDate)) 之间的位置

【讨论】:

  • 有没有办法重新编码这个 DATEADD("dd",180, (p.PeriodEndDate))?
  • @crisgomez 它不会导致性能问题。该函数本身不会导致性能问题。此条件过滤的记录数可能会导致性能下降,但如果条件符合您所需的逻辑,则您的问题出在其他地方,而不是在此条件下。
  • 使用 DATEADD 保存日期时间格式的数据最有可能更快。您可以参考stackoverflow.com/questions/2103687/…
猜你喜欢
  • 2014-02-02
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多