SQL查询取决于当前时间
我在一个表中有一些数据,我想从中查询数据,并根据执行查询的时间,我希望查询考虑当前时间戳 比如说SQL查询取决于当前时间,sql,sql-server-2008,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
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您正在寻找
XOR
操作符,但SQL2008中没有这样的操作符。您需要将XOR b
表示为(a和(不是b))或((不是a)和b)
您正在寻找的XOR
操作符,但SQL2008中没有这样的操作符。您需要将a异或b
表示为(a和(不是b))或((不是a)和b)
您的第二次查询将永远不会返回任何值,因为“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-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'))
你说的当前时间戳是指执行时间吗?我不太明白你想达到什么目的:)是的,我指的是执行的时间。我希望在一段时间内从结果中排除一行。因此,您希望在一段时间内(条件x)从结果中排除行,并允许从“条件x”中排除某些值-例如,您希望选择今天上午10点到上午11点之间的所有值,但如果该值为“第二个值”应该选择regardles?当你说当前时间戳时,你是指执行时间吗?我不太明白你想达到什么目的:)是的,我指的是执行的时间。我希望在一段时间内从结果中排除一行。因此,您希望在一段时间内(条件x)从结果中排除行,并允许从“条件x”中排除某些值-例如,您希望选择今天上午10点到上午11点之间的所有值,但如果该值为“第二个值”,则应重新选择?