SQL查询取决于当前时间

时间:2012-08-31 09:05:49

标签: sql sql-server-2008

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

例如

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

2 个答案:

答案 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'))