比如今天是8月17日:                     人员编号          出生时间
                       1               1980-07-01 
                       2               1983-08-26 
                       3               1982-10-02
                       4               1981-07-22求(1)最近10天内过生日的编号;
(2)刚过完生日的编号(取最靠近的一个人)
各位帮忙帮忙~~~~~~~~~~~~~~~~~~~~~~~~!!
        

解决方案 »

  1.   

    SELECT * FROM tb
    WHERE DATEDIFF(day,DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间),GETDATE()) <= 10;---------SELECT TOP 1 *  FROM tb WHERE DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间) > GETDATE()
    ORDER BY 出生时间 DESC;
      

  2.   

    1.select  人员编号 from tb where datediff(day,出生时间,getdate())<=10
    2.select top 1 人员编号 from tb order by 出生时间 desc
      

  3.   

    1.改改SELECT *,DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间) FROM @T
    WHERE ABS(DATEDIFF(day,DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间),GETDATE())) <= 10;
      

  4.   

    1
    SELECT  TOP 10 * FROM TB WHERE DATEDIFF(DAY,GETDATE(),出生时间)>0 ORDER BY 出生时间 ASC
    2
    SELECT TOP 1 * FROM TB WHERE DATEDIFF(DAY,GETDATE(),出生时间)<0 ORDER BY 出生时间 DESC
      

  5.   

    --指今天之前的十天 
    select   *   from   base_user   where   datediff(day,cast(left(convert(varchar(10),getdate(),120),4)   +   right(convert(varchar(10),birthday,120),6)   as   datetime),getdate()) <=10 
    --指今天之后的十天 
    select   *   from   base_user   where   datediff(day,getdate(),cast(left(convert(varchar(10),getdate(),120),4)   +   right(convert(varchar(10),birthday,120),6)   as   datetime)) <=10 
    --指今天之前之后的各十天 
    select   *   from   base_user   where   abs(datediff(day,getdate(),cast(left(convert(varchar(10),getdate(),120),4)   +   right(convert(varchar(10),birthday,120),6)   as   datetime))) <=10 
      

  6.   

    --> 生成测试数据: @T
    DECLARE @T TABLE (人员编号 INT,出生时间 DATETIME)
    INSERT INTO @T
    SELECT 1,'1980-07-01' UNION ALL
    SELECT 2,'1983-08-26' UNION ALL
    SELECT 3,'1982-10-02' UNION ALL
    SELECT 4,'1981-07-22'--SQL查询如下:SELECT *,DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间) FROM @T
    WHERE ABS(DATEDIFF(day,DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间),GETDATE())) <= 10;SELECT TOP 1 *  FROM @T
    WHERE DATEADD(year,DATEDIFF(year,出生时间,GETDATE()),出生时间) < GETDATE()
    ORDER BY 出生时间 DESC;
      

  7.   

    这个楼 结贴BS
    分数每次提问就这么点 还不结。。BS