首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求时间范围交集的sql如何写

2012-05-22 
求时间范围交集的sql怎么写?例如有一个表 t1 ,格式如下,thedate是生产日期,假设每种物品保质期都是 3个月,

求时间范围交集的sql怎么写?
例如有一个表 t1 ,格式如下,thedate是生产日期,假设每种物品保质期都是 3个月,例如雪莲保质期应该是一直到 2012-06-08.
如果任意输入一段时间范围,例如我现在输入 4.27-5.26,那么我希望能够列出当前在 4.27-5.26所有尚在保质期之内的物品清单,sql 应该怎么写?

select * from t1 

typeName theDate
哈密瓜 2012-03-01
雪莲 2012-03-08
西瓜 2012-03-13

[解决办法]

SQL code
--> 测试数据:[test]if object_id('[test]') is not null drop table [test]create table [test]([typeName] varchar(6),[theDate] datetime)insert [test]select '哈密瓜','2012-03-01' union allselect '雪莲','2012-03-08' union allselect '西瓜','2012-03-13'select [typeName],[theDate] from(select *,DATEADD(mm,3,[theDate]) as enddate from test)twhere enddate>='2012-05-26' and [theDate] between '2012-04-27' and '2012-05-26'
[解决办法]
你给的条件中,其实5月26号就根本没有用了,只要保质期大于4月27号就都属于这个范围内的。。。
SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')BEGIN    DROP TABLE tbaENDGOCREATE TABLE tba(    typeName VARCHAR(100),    theDate VARCHAR(100))INSERT INTO tbaSELECT '哈密瓜', '2012-03-01' UNIONSELECT '雪莲', '2012-03-08' UNIONSELECT '西瓜', '2012-03-13' UNIONSELECT '美人瓜','2012-4-25'--4.27-5.26SELECT * FROM tbaWHERE DATEADD(MONTH,3,theDate) > '2012-04-27'typeName    theDate哈密瓜    2012-03-01美人瓜    2012-4-25西瓜    2012-03-13雪莲    2012-03-08 

热点排行