【发布时间】:2016-04-17 17:46:13
【问题描述】:
我有一个包含这些条目的表:
StartDate | EndDate
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-06 | 2016-01-16
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-07 | 2016-01-17
2016-01-08 | 2016-01-18
2016-01-08 | 2016-01-18
2017-01-01 | 2017-01-10
2026-01-06 | 2026-01-16
2026-01-07 | 2026-01-17
我在存储过程中的查询是:
SELECT ROW_NUMBER() OVER ( ORDER BY [StartDate] ASC) as ROWNUM, [Oid]
From [dbo].[Ument]
Where (
(@StartDate is null or StartDate >= @StartDate)
or (@EndDate is null or EndDate <= @EndDate)
)
我想按用户编写的@StartDate 进行搜索,如果为空/空,则按@StartDate >= today 的日期搜索。
但是,同时,我想通过@endDate 搜索,由用户编写,或者如果为空/空,则搜索EndDate >= today。
如果今天在两个日期之间,我需要退回它。
像这样:
@startDate 不为空? YES:使用用户编写的@startDate 过滤startDate >= @StartDate。 否:使用今天的日期输入 startDate >= today。
@endDate 不为空? YES:使用用户编写的@endDate 过滤 endDate
【问题讨论】:
-
你的 sql 的输出是什么?你想要的输出是什么?
-
我不明白这个问题,但我认为第二个“OR”(..*or* (@EndDate..) 在您的标准中应该是“AND”。
-
对不起,把存储过程放在有疑问的地方就行了。
标签: sql-server date stored-procedures