Sql server 日期参数返回超出日期范围的值
使用SQLServerManagementStudio,我有一个使用日期参数的查询,但当我执行该查询时,我看到的行不在所选的日期范围内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
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和我的答案。