使用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
STARTDATE
和FINISHDATE
字段的格式为日期时间。
执行查询时,第一行显示的是2012-11-01 08:00:00000的STARTDATE和2018-09-27 17:00:00.000的FINISHDATE。显然不在声明的日期范围内。
我做错了什么?
答案 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。我接受了查询参数,结果按要求返回数据。