我在表中有一些数据,我想查询它中的数据,并且根据执行查询的时间,我希望查询考虑当前的时间戳。
例如
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
答案 0 :(得分:2)
您正在寻找XOR
运算符,但SQL2008中没有这样的运算符。您需要将a XOR b
表达为(a AND (NOT b)) OR ((NOT a) AND b)
。
答案 1 :(得分: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'))