Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何跳过假日代码为1的日期_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

Sql 如何跳过假日代码为1的日期

Sql 如何跳过假日代码为1的日期,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,使用SQLServer2000 表1 Date Holiday 23-02-2009 0 24-02-2009 1 25-02-2009 0 表2 ID Date 01 23-02-2009 01 24-02-2009 02 25-02-2009 …, 这里我想跳过假日=1的日期 Expected Output 01 23-02-2009 02 25-02-2009 如何对此条件进行查询?不知道您使用的是什么数据类型,但

使用SQLServer2000

表1

Date        Holiday

23-02-2009    0 
24-02-2009    1
25-02-2009    0 
表2

ID Date

01 23-02-2009     
01 24-02-2009    
02 25-02-2009     
…,
这里我想跳过假日=1的日期

Expected Output

01 23-02-2009
02 25-02-2009

如何对此条件进行查询?

不知道您使用的是什么数据类型,但乍一看,它看起来很简单:

select Table2.ID, Table2.Date from 
Table2 inner join Table1 on Table2.Date = Table1.Date
where Table1.Holiday <> 1
试试这个

SELECT  *
FROM    TABLE2 t2 
WHERE   t2.Date NOT IN (SELECT  Date FROM TABLE1 WHERE Holiday = 1)
如果表除了标记假日之外没有其他值,为什么有假日列,为什么有非假日的日期

我们还有一张度假桌

CREATE TABLE [dbo].[METADATA_CALENDAR](
    [CalendarDate] [datetime] NOT NULL,
    [Description] [nvarchar](500) NULL,
    [CalendarType] [nvarchar](100) NOT NULL,
    [CalendarLocal] [nvarchar](50) NOT NULL,
)
它可以为不同的国家/地区提供不同的日历类型。

选择:

SELECT t2.id, 
       t2.date
  FROM TABLE_2 t2
  JOIN TABLE_1 t1 ON t1.date = t2.date
                 AND t1.holiday = 0
…或使用存在:

SELECT t2.id, 
       t2.date
  FROM TABLE_2 t2
 WHERE EXIST(SELECT NULL
              FROM TABLE_1 t1
             WHERE t1.date = t2.date
               AND t1.holiday = 0)

不知道DB供应商的具体细节,但类似于:

select t2.date 
from table2 t2 
where t2.date in (select t1.date 
                  from table1 t1 
                  where t1.holiday <> 1)

当你说找到给定日期后的第13个工作日时,这类问题就变得有趣了……你说holiday=0而不是1是在做一个小小的假设:-@Steve:很明显,holiday是二进制的,不太可能包含0或1以外的值。
select t2.date 
from table2 t2 
where t2.date in (select t1.date 
                  from table1 t1 
                  where t1.holiday <> 1)