包含日期和检查

时间:2015-09-23 11:50:44

标签: sql sql-server

我有一个包含三列的表格 - '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。 请帮忙,谢谢。

3 个答案:

答案 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。“