1

我在 SQL Server 表中有以下数据

 Id    Name   StartDate    EndDate
 1      A      2/2/2012     21/2/012
 2      B      3/2/2012     2/2/2014
 3      C      21/2/2012    3/3/2012
 4      D      1/1/2012     3/3/2012

我想获取Start DateEnd Date今天日期匹配的所有行

请帮忙。

4

2 回答 2

3

如果您的意思是要将范围与当前日期匹配,那么假设StartDateEndDatearedate类型,您可以尝试以下操作:

SELECT ...
FROM atable
WHERE CAST(GETDATE() AS date) BETWEEN StartDate AND EndDate
;

以上与此基本相同:

SELECT ...
FROM atable
WHERE StartDate <= CAST(GETDATE() AS date)
    AND EndDate >= CAST(GETDATE() AS date)
;

但是,如果优化器无法将第一个版本转换为第二个版本,则第一个版本可能会产生更差的查询计划。因此,如果性能至关重要,您应该先测试,然后再决定。

请注意,以上两个版本都假定它EndDate是包容性的。如果它是独占的,您可以采用第二个版本并稍微修改它:

SELECT ...
FROM atable
WHERE StartDate <= CAST(GETDATE() AS date)
    AND EndDate >  CAST(GETDATE() AS date)
;

您可以进一步简化为:

SELECT ...
FROM atable
WHERE StartDate <= GETDATE()
    AND EndDate >  GETDATE()
;

但这可能会使用隐式转换,这可能会影响性能,尽管我不能确定在多大程度上,甚至更不确定你是否可以接受。同样,您需要测试和比较。一般来说,我会从一个更简单的版本开始,并记住当我对目前的表现不(或不再)满意的情况下的替代方案。

于 2013-02-24T17:18:31.960 回答
1

根据我对“开始日期和结束日期与今天日期匹配的数据”的理解,您似乎想要获取 StartDate 和 EndDate 等于今天的所有数据。

这是查询:

SELECT *
FROM TableName
WHERE StartDate = cast(getDate() As Date) AND EndDate = cast(getDate() As Date);
于 2013-02-24T16:40:26.783 回答