例如有一个表 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

解决方案 »

  1.   

    select * from tb where dateadd(month,3,thedate) between '输入小日期' and '输入大日期'
      

  2.   


    --> 测试数据:[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 all
    select '雪莲','2012-03-08' union all
    select '西瓜','2012-03-13'
    select [typeName],[theDate] from(
    select *,
    DATEADD(mm,3,[theDate]) as enddate from test)t
    where enddate>='2012-05-26' and [theDate] between '2012-04-27' and '2012-05-26'
      

  3.   

    你给的条件中,其实5月26号就根本没有用了,只要保质期大于4月27号就都属于这个范围内的IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
    BEGIN
    DROP TABLE tba
    END
    GO
    CREATE TABLE tba
    (
    typeName VARCHAR(100),
    theDate VARCHAR(100)
    )INSERT INTO tba
    SELECT '哈密瓜', '2012-03-01' UNION
    SELECT '雪莲', '2012-03-08' UNION
    SELECT '西瓜', '2012-03-13' UNION
    SELECT '美人瓜','2012-4-25'--4.27-5.26SELECT * FROM tba
    WHERE DATEADD(MONTH,3,theDate) > '2012-04-27'typeName theDate
    哈密瓜 2012-03-01
    美人瓜 2012-4-25
    西瓜 2012-03-13
    雪莲 2012-03-08
    如果生产日期可能大于5月26号的时候,后面的条件才有作用。SELECT * FROM tba
    WHERE DATEADD(MONTH,3,theDate) > '2012-04-27' AND theDate <= '2012-05-26'