日期参数返回日期范围之外的值

时间:2017-07-11 11:39:47

标签: sql-server datetime

使用SQL Server Management Studio,我有一个查询,我正在使用日期参数,但当我执行查询时,我看到的行不在所选的日期范围内。

DECLARE @StartDate Date = '7/10/2017'
DECLARE @EndDate Date = '7/17/2017'

SELECT DISTINCT 
    PROJECTID, 
    ACTIVITYID, ACTIVITYNAME, 
    ISPRIMARYRESOURCE, RESOURCEID,
    STARTDATE, FINISHDATE,
    FORMAT(STARTDATE,'dddd') + ', ' + FORMAT(STARTDATE,'m') + ', ' +  
    FORMAT(STARTDATE,'yyyy') AS ES_FORMATTED
FROM 
    Primavera_ODS.TASKRSRCX
WHERE 
    PROJECTID IN ('ONLINE', 'ESR01', 'H-ONL-Active', 'HNP-NBKRRPLD', 'HNP-RVH-LIV',
                  'HNP-CSCR-LIV', 'HNP-TCS-LIV', 'HNP-LPT-LIV', 'HNP-DICSP-LIV',
                  'HNP-NRRVHE', 'HNP-IDS-LIV')
    AND FINISHDATE >= @StartDate 
    AND STARTDATE < @EndDate
ORDER BY 
    STARTDATE

STARTDATEFINISHDATE字段的格式为日期时间。

执行查询时,第一行显示的是2012-11-01 08:00:00000的STARTDATE和2018-09-27 17:00:00.000的FINISHDATE。显然不在声明的日期范围内。

我做错了什么?

4 个答案:

答案 0 :(得分:0)

DECLARE @StartDate Date = '7/10/2017'

2017年10月7日或2017年7月10日?

无论哪种方式

FINISHDATE >=@StartDate and STARTDATE < @EndDate

装置

'2018-09-27' >= '2017-07-10' AND '2012-11-01' < '2017-07-17'

两个条件都是真的

你是说这个吗?

STARTDATE < @StartDate AND @EndDate <= FINISHDATE

答案 1 :(得分:0)

您需要测试两个日期是否在界限范围内,所以:

@StartDate BETWEEN STARTDATE  AND FINISHDATE 
AND
@EndDate  BETWEEN STARTDATE  AND FINISHDATE 

您可能还需要:

AND
@StartDate < @EndDate

您还可以将日期写为'17-July-2017''2017-07-17',以避免任何歧义。

答案 2 :(得分:0)

如果您的SQL如上所述,那么没有错。

您的标准是FINISHDATE >= @StartDate@StartDate是'2017年10月10日'。从FINISHDATE ='2018-09-27 17:00:00.000'得到的结果,显然FINISHDATE&gt; @startDate

标准还说STARTDATE < @EndDate@EndDate设置为“2017年7月17日”,您将返回STARTDATE ='2012-11-01 08:00:00.000',这是真的。

我的假设是您的日期范围应介于@StartDate@EndDate之间?如果这是正确的,也许你可以尝试类似的东西:

AND 
FINISHDATE BETWEEN @StartDate AND @EndDate
AND
STARTDATE BETWEEN @StartDate AND @EndDate

尼尔斯

答案 3 :(得分:0)

你是完全正确的gbn。我接受了查询参数,结果按要求返回数据。