如果逐位操作,则将SQL插入临时表

时间:2017-08-10 20:07:11

标签: sql sql-server

我正在使用SQL查询插入临时表。我有一个名为“Flag”的列,我希望根据条件按位“OR”,我想在SQL查询中多次执行...所以就伪代码而言。

select
       if(@Date not between a.beginDate and isnull(a.endDate,@Date)
          Flag | 1
       else if (@Date not between b.beginDate and isnull(b.endDate,@Date)
          Flag | 2
       else if (@Date not between c.beginDate and isnull(c.endDate,@Date)
          Flag | 4
       etc.

这甚至可能吗?我在查询之后在临时表上使用单独的更新语句来执行此操作并且它可以工作,但我被告知可以使用查询中的case语句来完成。

在最简单的情况下:

Table A             Table B            Table C
Flag                Name               Name
0                   "Scott"            "Joe"

If table B name is "Scott"
Flag | 1 = 1

if table C name is "Joe"
Flag | 2 = 2

之后,临时表中的标志应为3。

1 个答案:

答案 0 :(得分:0)

您可以像这样使用bitwise OR operator

SELECT 
  CASE WHEN @Date NOT BETWEEN a.beginDate AND ISNULL(a.endDate,@Date) THEN 1  ELSE 0 END 
| CASE WHEN @Date NOT BETWEEN b.beginDate AND ISNULL(b.endDate,@Date) THEN 2  ELSE 0 END 
| CASE WHEN @Date NOT BETWEEN c.beginDate AND ISNULL(c.endDate,@Date) THEN 4  ELSE 0 END 
AS Flag
FROM 
....
相关问题