Sql server 日期参数返回超出日期范围的值

Sql server 日期参数返回超出日期范围的值,sql-server,datetime,Sql Server,Datetime,使用SQLServerManagementStudio,我有一个使用日期参数的查询,但当我执行该查询时,我看到的行不在所选的日期范围内 DECLARE @StartDate Date = '7/10/2017' DECLARE @EndDate Date = '7/17/2017' SELECT DISTINCT PROJECTID, ACTIVITYID, ACTIVITYNAME, ISPRIMARYRESOURCE, RESOURCEID, STAR

使用SQLServerManagementStudio,我有一个使用日期参数的查询,但当我执行该查询时,我看到的行不在所选的日期范围内

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
DECLARE@StartDate日期='7/10/2017'
声明@EndDate日期='2017年7月17日'
选择不同的
投射的,
ACTIVITYID、ACTIVITYNAME、,
iPrimaryResource,RESOURCEID,
开始日期,完成日期,
格式(STARTDATE,'dddd')+','+格式(STARTDATE,'m')+','+
格式(STARTDATE,'yyyy')为ES_格式
从…起
Primavera_ODS.taskrcx
哪里
“在线”、“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’)
和FINISHDATE>=@StartDate
和开始日期<@EndDate
订购人
起始日期
STARTDATE
FINISHDATE
字段的格式为datetime

执行查询时,第一行显示的起始日期为2012-11-01 08:00:00.000,结束日期为2018-09-27 17:00:00.000。显然不在声明的日期范围内

我做错了什么

DECLARE @StartDate Date = '7/10/2017'
这是2017年10月7日还是2017年7月10日

无论如何

FINISHDATE >=@StartDate and STARTDATE < @EndDate
FINISHDATE>=@StartDate和StartDate<@EndDate
意味着

'2018-09-27'>='2017-07-10'和'2012-11-01'<'2017-07-17'
这两种情况都是正确的

你是说这个吗

STARTDATE < @StartDate AND @EndDate <= FINISHDATE
STARTDATE<@STARTDATE和@EndDate
这是2017年10月7日还是2017年7月10日

无论如何

FINISHDATE >=@StartDate and STARTDATE < @EndDate
FINISHDATE>=@StartDate和StartDate<@EndDate
意味着

'2018-09-27'>='2017-07-10'和'2012-11-01'<'2017-07-17'
这两种情况都是正确的

你是说这个吗

STARTDATE < @StartDate AND @EndDate <= FINISHDATE

STARTDATE<@STARTDATE和@EndDate您需要测试两个日期是否都在范围内,以便:

@StartDate BETWEEN STARTDATE  AND FINISHDATE 
AND
@EndDate  BETWEEN STARTDATE  AND FINISHDATE 
您可能还需要:

AND
@StartDate < @EndDate
和
@开始日期<@EndDate

您也可以将日期写为
'2017年7月17日'
'2017-07-17'
,以避免任何歧义。

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

@StartDate BETWEEN STARTDATE  AND FINISHDATE 
AND
@EndDate  BETWEEN STARTDATE  AND FINISHDATE 
您可能还需要:

AND
@StartDate < @EndDate
和
@开始日期<@EndDate

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

如果您的SQL符合上述要求,则没有任何问题

您的标准是
FINISHDATE>=@StartDate
@StartDate
为“2017年7月10日”。从您获得的结果来看,
FINISHDATE
='2018-09-27 17:00:00.000',显然
FINISHDATE
@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

Niels

如果您的SQL符合上述要求,则没有任何问题

您的标准是
FINISHDATE>=@StartDate
@StartDate
为“2017年7月10日”。从您获得的结果来看,
FINISHDATE
='2018-09-27 17:00:00.000',显然
FINISHDATE
@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

尼尔斯

你完全正确。我已接受查询参数,结果将按要求返回数据。

您完全正确。我已经接受了查询参数,结果将按要求返回数据。

请发布一篇文章。“最小”意味着去掉不相关的部分,就像所有与投影相关的废话一样。“可验证”是指包括
创建表
语句和样本数据(在
插入到
语句的from中),以便我们可以准确地看到您的查询产生了什么意外结果。最好显示这些答案是否帮助解决了您的问题,以及它们以何种方式解决了问题。请发布一篇文章。“最小”意味着去掉不相关的部分,就像所有与投影相关的废话一样。“可验证”意味着包括
创建表
语句和样本数据(在
插入到
语句的from中),这样我们就可以确切地看到您的查询产生了什么意外结果。最好的做法是显示这些答案是否有助于解决您的问题以及它们以什么方式解决了问题。时间是7月10日和7月17日。那么,我如何编写查询以获取所选范围内的数据呢?请分别参阅下面的Peter Smith和我的答案。时间是7月10日和7月17日。那么,如何编写查询以获取所选范围内的数据呢?请分别参阅下面的Peter Smith和我的答案。