+ -
当前位置:首页 → 问答吧 → 查询时间段 ?

查询时间段 ?

时间:2011-12-13

来源:互联网

数据是这样存储的

-- 表结构
tableA 
id int
beginDate datetime
endDate datetime
type varchar(50)


-- 存储的数据
1 2011-05-01 2011-06-20 假期A
2 2011-08-20 2011-09-10 假期B
3 2011-09-25 2011-12-02 假期C




question,我想要某个月,某种类型的结果集. (比如假期A类型9月份的结果集,一天为一条记录),或者反过来,某个月内不包括某种假期类型的结果集,
现在的想法是app写一个for循环,按某个月的天数循环,这样太慢,请教如何通过sql 语句查询出来呢?

作者: chkmouse   发布时间: 2011-12-13

SQL code
DECLARE @dt DATETIME
SET @dt='2011-09-01'

SELECT * FROM tableA WHERE endDate>@dt AND beginDate<DATEADD(m,1,@dt)-1

作者: roy_88   发布时间: 2011-12-13

引用 1 楼 roy_88 的回复:
SQL code
DECLARE @dt DATETIME
SET @dt='2011-09-01'

SELECT * FROM tableA WHERE endDate>@dt AND beginDate<DATEADD(m,1,@dt)-1


老兄 这样还是循环的查询的,一个月中有多少天就查询多少次,意义不大.

作者: chkmouse   发布时间: 2011-12-13

SQL code
SELECT * FROM tableA WHERE endDate>=指定月的日期 
or beginDate<=DATEADD(m,1,指定月的日期)

作者: Beirut   发布时间: 2011-12-13

引用 2 楼 chkmouse 的回复:

引用 1 楼 roy_88 的回复:
SQL code
DECLARE @dt DATETIME
SET @dt='2011-09-01'

SELECT * FROM tableA WHERE endDate>@dt AND beginDate<DATEADD(m,1,@dt)-1


老兄 这样还是循环的查询的,一个月中有多少天就查询多少次,意义不大.

不是这样理解的。。。。。

作者: Beirut   发布时间: 2011-12-13

引用 2 楼 chkmouse 的回复:

引用 1 楼 roy_88 的回复:
SQL code
DECLARE @dt DATETIME
SET @dt='2011-09-01'

SELECT * FROM tableA WHERE endDate>@dt AND beginDate<DATEADD(m,1,@dt)-1


老兄 这样还是循环的查询的,一个月中有多少天就查询多少次,意义不大.


樓主要搞清楚什麼是循環??

while //goto

作者: roy_88   发布时间: 2011-12-13

用between ...and约束时间范围就行了

作者: fredrickhu   发布时间: 2011-12-13

select * from tb where col between @dt and dateadd(mm,1,@dt)

作者: fredrickhu   发布时间: 2011-12-13

http://topic.csdn.net/u/20111209/09/0c195987-fe3b-46e9-8538-cb9270a92d9a.html?1359711204

上次 我问的问题,根据第一个语句就可以得到结果了

作者: cedar_xu   发布时间: 2011-12-13