SQL Server:WHERE子句中的IF语句

时间:2019-01-30 23:12:48

标签: sql sql-server if-statement case

我似乎无法使IF语句在SQL Server的WHERE子句中工作。

基本上,如果{'slot_id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8}, 'class': {0: 'A', 1: 'B', 2: 'C', 3: 'C', 4: 'C', 5: 'C', 6: 'D', 7: 'E'}, 'day': {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Tuesday', 6: 'Thursday', 7: 'Saturday'}, 'base_date': {0: datetime.date(2019, 1, 21), 1: datetime.date(2019, 1, 22), 2: datetime.date(2019, 1, 23), 3: datetime.date(2019, 1, 23), 4: datetime.date(2019, 1, 24), 5: datetime.date(2019, 1, 22), 6: datetime.date(2019, 1, 24), 7: datetime.date(2019, 1, 26)}} example['base_date'] = pd.to_datetime(example['base_date'].astype(str), format='%d%m%Y') example['base_date'] = example['base_date'].dt.date 为0,我想跳过IF语句中的这两行。

这是我所拥有的:

@PK

也尝试过:

WHERE
    IF (@PK <> 0)
        pk.ID >= @PK
       AND pk.ID < (@PK + 500)
    ELSE
       Set_No = Set_No
    END
    AND Set_No IN (1,2,3,4)

编辑:我搜索了SO,并尝试了发现的几处内容(包括上面的内容),但它们没有效果。

1 个答案:

答案 0 :(得分:4)

我认为使用基本的布尔逻辑运算符可以更轻松地编写所需的逻辑:

WHERE (@PK = 0 OR (pk.ID >= @PK AND pk.ID < @PK + 500)) AND
      Set_No IN (1, 2, 3, 4)