如表 kcmxpm         shl      xq
消炎片     526    2012-10-10 
感冒片     100    2010-11-25
妇科药     5525   2012-05-31
膏药       75     2011-01-10
注射剂     9522   2011-03-13要求:以当前日期为准,求近效期180天内的,达到如下效果感冒片     100    2010-11-25
膏药       75     2011-01-10
注射剂     9522   2011-03-13

解决方案 »

  1.   

    --------------
    -- 测试数据 --
    --------------
    if object_id('tempdb.dbo.#kcmx') is not null drop table #kcmx
    create table #kcmx(pm varchar(8), shl int, xq datetime)
    insert into #kcmx
    select '消炎片', 526, '2012-10-10' union all
    select '感冒片', 100, '2010-11-25' union all
    select '妇科药', 5525, '2012-05-31' union all
    select '膏药', 75, '2011-01-10' union all
    select '注射剂', 9522, '2011-03-13'select * from #kcmx where datediff(day, getdate(), xq) between 0 and 180/*
    pm       shl         xq
    -------- ----------- -----------------------
    感冒片      100         2010-11-25 00:00:00.000
    膏药       75          2011-01-10 00:00:00.000
    注射剂      9522        2011-03-13 00:00:00.000(3 行受影响)*/
      

  2.   

    select * from kcmx where abs(datediff(dd,xq,getdate())) <=180
      

  3.   

    select * from tb where datediff(day,getdate(),xq)<=180
      

  4.   

    如果只是向后180天则把abs去掉
      

  5.   

    select * from #kcmx where datediff(day, getdate(), xq) between 0 and 180
    这个在测试数据好用,但我放到我数据库实际情况就不好用了。
    kevinwen0413的select * from kcmx where abs(datediff(dd,xq,getdate())) <=180
    好用。
      

  6.   

    select * from retmxls where rq between getdate()-5 and getdate() order by rq
    这个也行