0

我在表中有一些数据,我想从中查询数据,并且根据执行查询的时间,我希望查询考虑当前时间戳。

例如

declare @data table (id int, value nvarchar (50))

insert into @data values (1, 'First value')
insert into @data values (2, 'Second value')
insert into @data values (3, 'Third value')
insert into @data values (4, 'Fourth value')

查询 1

select * from @data
where value != 'First value'
and (value != 'Second value' and  '2012-08-30 23:59:59' between '2012-08-30 23:59:59' and '2012-09-15 23:59:59')

查询 1 返回“第三个值”和“第四个值”

查询 2

select * from @data
where value != 'First value'
and (value != 'Second value' and  '2012-08-29 23:59:59' between '2012-08-30 23:59:59' and '2012-09-15 23:59:59')

查询 2 不返回任何值,我希望它返回“第二个值”“第三个值”“第四个值”

感谢所有帮助问候,Jesper

4

2 回答 2

2

您正在寻找XOR运算符,但在 SQL2008 中没有。您需要表示a XOR b(a AND (NOT b)) OR ((NOT a) AND b)

于 2012-08-31T09:12:05.930 回答
1

您的第二个查询将永远不会返回任何值,因为 '2012-08-29 23:59:59' 不在其他两个日期之间。

它肯定永远不会返回“第二值”,因为您特别排除了它。

我认为你需要对你试图实现的逻辑更清楚一点,也许用 OR NOT 替换最后一个 AND 会让你更接近,但这是一个猜测。

select * from @data
where value != 'First value'
and (value != 'Second value' OR NOT ( '2012-08-29 23:59:59' between '2012-08-30 23:59:59' and '2012-09-15 23:59:59'))
于 2012-08-31T09:13:24.177 回答