求一个时间判断条件,急,在线等

myhid 2009-02-18 08:54:03
表结构:
id sdd edd
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03
5 2009-01-06 2009-01-08
6 2009-01-01 2009-01-01

我现在给出一个时间段比如:2009-01-02到2009-01-06
我要求查出sdd到edd之间所有包含给定日期段之间的日期.只要包含了就取出来.
那么上面的就要得到1,2,3,4条记录,只有5,6不符合.
我已经晕了.可能还有一些数据未举出来,
...全文
208 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
小曦子 2009-02-18
  • 打赏
  • 举报
回复
学习..
Terry717 2009-02-18
  • 打赏
  • 举报
回复

SELECT * FROM 表
WHERE ('2009-01-02' BETWEEN SDD AND EDD)
OR ('2009-01-06' BETWEEN SDD AND EDD )
OR (SDD BETWEEN '2009-01-02' AND '2009-01-06')
OR (EDD BETWEEN '2009-01-02' AND '2009-01-06' )
myhid 2009-02-18
  • 打赏
  • 举报
回复
结账!
myhid 2009-02-18
  • 打赏
  • 举报
回复
呵呵,其实20楼是最简单的答案!也是正确的答案!
还有15楼,他们二个意思差不多.只是15楼把条件中的=号去掉就可以了!
至于22楼的答案.可能也是正确的.但是很复杂了.!
xty001 2009-02-18
  • 打赏
  • 举报
回复
不好意思,把范围搞错了,我再看看
select * from table where (sdd >= '2009-01-02' and sdd <='2009-01-06') or (edd >= '2009-01-02' and edd <='2009-01-06') or (add <= '2009-01-02' and edd >='2009-01-06')

再多加一中情况了,这样可以不?不可以了继续加,好象也用不着那么麻烦吧
myhid 2009-02-18
  • 打赏
  • 举报
回复

你仔细看清楚了...如果这么简单我也不问了.前面很多人都错了呢.
你的答案数据1能取出来吗??


[Quote=引用 27 楼 xty001 的回复:]
21/26楼的都正确,楼主想不通不要紧,试一下就知道了

简单的事情简单做!
[/Quote]
Roc_Lee 2009-02-18
  • 打赏
  • 举报
回复
20~26都可以,方式不同而已
xty001 2009-02-18
  • 打赏
  • 举报
回复
21/26楼的都正确,楼主想不通不要紧,试一下就知道了

简单的事情简单做!
youqi1984 2009-02-18
  • 打赏
  • 举报
回复
SELECT * FROM TB WHERE (SDD BETWEEN '2009-01-02' AND '2009-01-06') OR (EDD BETWEEN '2009-01-02' AND '2009-01-06' )
myhid 2009-02-18
  • 打赏
  • 举报
回复

15楼的答案改一下就是正确的.
20楼的答案也是正确答案!

22楼的答案我还要验证一下.我已经被这时间搞晕了!!!
myhid 2009-02-18
  • 打赏
  • 举报
回复
你的答案不行的.你仔细看看.1,4你就取不出来

[Quote=引用 21 楼 xty001 的回复:]
select * from table where (sdd >= '2009-01-02' and sdd <='2009-01-06') or (edd >= '2009-01-02' and edd <='2009-01-06')

逻辑问题,简单问题简单办
[/Quote]
xty001 2009-02-18
  • 打赏
  • 举报
回复
服了you
  • 打赏
  • 举报
回复

--> (让你望见影子的墙)生成测试数据,时间:2009-02-18

if not object_id('tb') is null
drop table tb
Go
Create table tb([id] int,[sdd] Datetime,[edd] Datetime)
Insert tb
select 1,'2009-01-01','2009-01-31' union all
select 2,'2009-01-03','2009-01-03' union all
select 3,'2009-01-03','2009-01-08' union all
select 4,'2009-01-01','2009-01-03' union all
select 5,'2009-01-06','2009-01-08' union all
select 6,'2009-01-01','2009-01-01'
Go
Select * from tb

declare @start datetime,@end datetime
set @start='2009-01-02'
set @end='2009-01-06'

select id,sdd,edd
from tb
where (sdd<=@start and edd>=@start) or(sdd>=@start and sdd<=@end)
1 2009-01-01 00:00:00.000 2009-01-31 00:00:00.000
2 2009-01-03 00:00:00.000 2009-01-03 00:00:00.000
3 2009-01-03 00:00:00.000 2009-01-08 00:00:00.000
4 2009-01-01 00:00:00.000 2009-01-03 00:00:00.000
5 2009-01-06 00:00:00.000 2009-01-08 00:00:00.000

xty001 2009-02-18
  • 打赏
  • 举报
回复
select * from table where (sdd >= '2009-01-02' and sdd <='2009-01-06') or (edd >= '2009-01-02' and edd <='2009-01-06')

逻辑问题,简单问题简单办
htl258_Tony 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 myhid 的回复:]
我写错了.第5条数据也是成立的.本来写条件时是想写2009-01-05的

引用 14 楼 htl258 的回复:
引用楼主 myhid 的帖子:
表结构:
id sdd edd
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03
5 2009-01-06 2009-01-08
6 2009-01-01 …
[/Quote]

DECLARE @a TABLE(id INT,sdd varchar(10),edd VARCHAR(10))
insert @a select 1,'2009-01-01','2009-01-31'
union all select 2,'2009-01-03','2009-01-03'
union all select 3,'2009-01-03','2009-01-08'
union all select 4,'2009-01-01','2009-01-03'
union all select 5,'2009-01-06','2009-01-08'
union all select 6,'2009-01-01','2009-01-01'


DECLARE @s VARCHAR(10),@e VARCHAR(10)
SELECT @s='2009-01-02',@e='2009-01-06'

SELECT * FROM @a WHERE @e>=sdd and @s<=edd
/*
id sdd edd
----------- ---------- ----------
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03
5 2009-01-06 2009-01-08

(所影响的行数为 5 行)
*/
htl258_Tony 2009-02-18
  • 打赏
  • 举报
回复

DECLARE @a TABLE(id INT,sdd varchar(10),edd VARCHAR(10))
insert @a select 1,'2009-01-01','2009-01-31'
union all select 2,'2009-01-03','2009-01-03'
union all select 3,'2009-01-03','2009-01-08'
union all select 4,'2009-01-01','2009-01-03'
union all select 5,'2009-01-06','2009-01-08'
union all select 6,'2009-01-01','2009-01-01'


DECLARE @s VARCHAR(10),@e VARCHAR(10)
SELECT @s='2009-01-02',@e='2009-01-06'

SELECT * FROM @a WHERE @e>=sdd and @s<edd
/*
id sdd edd
----------- ---------- ----------
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03
5 2009-01-06 2009-01-08

(所影响的行数为 5 行)

*/
myhid 2009-02-18
  • 打赏
  • 举报
回复
我写错了.第5条数据也是成立的.本来写条件时是想写2009-01-05的

[Quote=引用 14 楼 htl258 的回复:]
引用楼主 myhid 的帖子:
表结构:
id sdd edd
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03
5 2009-01-06 2009-01-08
6 2009-01-01 2009-01-01

我现在给出一个时间段比如:2009-01-02到2009-01-06
我要求查出sdd到edd之间所有包…
[/Quote]
htl258_Tony 2009-02-18
  • 打赏
  • 举报
回复

DECLARE @a TABLE(id INT,sdd varchar(10),edd VARCHAR(10))
insert @a select 1,'2009-01-01','2009-01-31'
union all select 2,'2009-01-03','2009-01-03'
union all select 3,'2009-01-03','2009-01-08'
union all select 4,'2009-01-01','2009-01-03'
union all select 5,'2009-01-06','2009-01-08'
union all select 6,'2009-01-01','2009-01-01'


DECLARE @s VARCHAR(10),@e VARCHAR(10)
SELECT @s='2009-01-02',@e='2009-01-06'

SELECT * FROM @a WHERE @e>sdd and @s<edd
/*
id sdd edd
----------- ---------- ----------
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03

(所影响的行数为 4 行)
*/
myhid 2009-02-18
  • 打赏
  • 举报
回复
抱歉,给出的条件应该是2009-01-02到2009-01-05
如果是给出的2009-02-06的话,那么第5条数据也是成立的!
chuifengde 2009-02-18
  • 打赏
  • 举报
回复
DECLARE @a TABLE(id INT,sdd varchar(10),edd VARCHAR(10))
insert @a select 1,'2009-01-01','2009-01-31'
union all select 2,'2009-01-03','2009-01-03'
union all select 3,'2009-01-03','2009-01-08'
union all select 4,'2009-01-01','2009-01-03'
union all select 5,'2009-01-06','2009-01-08'
union all select 6,'2009-01-01','2009-01-01'


DECLARE @s VARCHAR(10),@e VARCHAR(10)
SELECT @s='2009-01-02',@e='2009-01-06'

SELECT * FROM @a WHERE not (@e<=sdd OR @s>=edd)


--result
/*id sdd edd
----------- ---------- ----------
1 2009-01-01 2009-01-31
2 2009-01-03 2009-01-03
3 2009-01-03 2009-01-08
4 2009-01-01 2009-01-03

(所影响的行数为 4 行)
*/
加载更多回复(12)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧