我有一个包含三列的表格 - 'DateFrom', 'DateTo' and 'Loc'
。
我想写一个程序,它将采用三个参数 - '@From_', '@To_' and '@Loc_'
然后检查表格是否有两行,其中' DateFrom'从例如第一行早于' @From _'和' DateTo'例如,第二行晚于@To _'和' Loc'是正确的,程序将返回1.如果不返回0。
例如,我有包含行的表:
+---------------------------+
| DateFrom DateTo Loc |
+---------------------------+
| 2015-01-01 2015-01-03 1 |
| 2015-01-04 2015-01-06 1 |
+---------------------------+
我将用params @DateFrom_='2015-01-02', @DateTo_='2015-01-05',@Loc_=1
执行程序,程序将返回1.
但如果表是:
+---------------------------+
| DateFrom DateTo Loc |
+---------------------------+
| 2015-01-01 2015-01-03 1 |
| 2015-01-05 2015-01-06 1 |
+---------------------------+
具有相同参数的过程:@DateFrom_='2015-01-02', @DateTo_='2015-01-05',@Loc_=1
将返回0,因为表格中不存在2015-01-04。
请帮忙,谢谢。
答案 0 :(得分:0)
declare @ct as int=0
select @ct=count(*) from Table_name where DateFrom>@from_date and toDate<@to_date and loc=@loc
if @ct>1
begin
select 1
end
else
begin
select 0
end
编辑2:
declare @ct as int=0
declare @dateDiff as int=0
select @ct=count(*),@dateDiff=datediff(Day,@from_date,@to_date) from Table_name where DateFrom>@from_date and toDate<@to_date and loc=@loc
if @ct>1 and @ct=@dateDiff
begin
select 1
end
else
begin
select 0
end
这个怎么样?
答案 1 :(得分:0)
你可以尝试这样做。
SELECT TOP(1) (CASE WHEN DateFrom > @from_date AND toDate < @to_date AND loc = @loc THEN 1 ELSE 0 END) AS Result FROM table_name
答案 2 :(得分:0)
我有这个想法。
第1步:
我的第一行“DateFrom
”早于'@From_'
。如果“DateTo
”晚于'@To_'
return 1
。
第2步:
否则我会在'@DatAUX = DateTo'
添加一天,并检查'DateFrom'
是否早于'@DatAUX'
的行,我选择DateTo
'并与param进行比较{ {1}}。如果表中的“'@DateTo'
”稍后,则程序为DateTo
,否则重复return 1
。“