最近在一个项目中有这样一个需求,在一个表A(id,num,adddate) 中 查询出adddate 时间间隔相差两秒以内的记录!最后还是到csdn上求助(http://topic.csdn.net/u/20080509/16/786bcc61-5697-4762-be17-8d4c5955c28e.html) 问题才解决,sql语句如下
--
建立测试环境
set nocount on
create table test(ID varchar ( 20 ),Num varchar ( 20 ),AddDate varchar ( 20 ))
insert into test select ' 1 ' , ' 5 ' , ' 2008-03-10 9:26:20 '
insert into test select ' 2 ' , ' 2 ' , ' 2008-03-10 9:26:22 '
insert into test select ' 3 ' , ' 2 ' , ' 2008-03-10 9:28:20 '
insert into test select ' 4 ' , ' 2 ' , ' 2008-03-15 10:26:20 '
insert into test select ' 5 ' , ' 6 ' , ' 2008-03-15 10:26:22 '
go
-- 测试
select * from test a
where exists ( select 1 from test where id <> a.id
and abs ( datediff (s,a.AddDate,AddDate)) <= 2 )
-- 删除测试环境
drop table test
set nocount off
/**/ /*
1 5 2008-03-10 9:26:20
2 2 2008-03-10 9:26:22
4 2 2008-03-15 10:26:20
5 6 2008-03-15 10:26:22
*/
set nocount on
create table test(ID varchar ( 20 ),Num varchar ( 20 ),AddDate varchar ( 20 ))
insert into test select ' 1 ' , ' 5 ' , ' 2008-03-10 9:26:20 '
insert into test select ' 2 ' , ' 2 ' , ' 2008-03-10 9:26:22 '
insert into test select ' 3 ' , ' 2 ' , ' 2008-03-10 9:28:20 '
insert into test select ' 4 ' , ' 2 ' , ' 2008-03-15 10:26:20 '
insert into test select ' 5 ' , ' 6 ' , ' 2008-03-15 10:26:22 '
go
-- 测试
select * from test a
where exists ( select 1 from test where id <> a.id
and abs ( datediff (s,a.AddDate,AddDate)) <= 2 )
-- 删除测试环境
drop table test
set nocount off
/**/ /*
1 5 2008-03-10 9:26:20
2 2 2008-03-10 9:26:22
4 2 2008-03-15 10:26:20
5 6 2008-03-15 10:26:22
*/
首先还感谢jinjazz 的帮助,看到这个语句,发觉自己对exists 子查询不能理解,以前对exists的使用也就是判断某个条件的记录是否存在。然后查找sql2000 帮助
EXISTS
指定一个子查询,检测行的存在。
语法
EXISTS subquery
参数
subquery
是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。
结果类型
Boolean
结果值
如果子查询包含行,则返回 TRUE。
请理解的朋友帮忙解释一下!