找到7天内要过生日的记录

     前几天去面试,面试官问到了一道题,如何找到7天内需要过生日的记录,一时蒙住了,看来这两年来一直做管理,数据库基本的东西真是丢掉了不少,非常惭愧,导致后面的面试也砸了。

    回来一想,这个问题其实很简单,关键的一点就是找到当前日期和生日的月、日之间的差距在7天内的记录,有点绕的地方是记录的年份哪年的都有,怎么处理这个年是个小技巧,绕过了这点其他的很简单。

   其实年的处理可以找到和现在的年份的差异,给记录的年份增加这个差异;或者构造一个当前年+记录月+记录日的日期进行比较。

代码如下:

 1 --创建测试库
 2 create database mytempdb
 3 go
 4 use mytempdb
 5 go
 6 --创建测试表
 7 create table t1
 8 (
 9 ID int identity(1,1),
10 dbirth datetime
11 )
12 go
13 
14 --select * from t1
15 --插入测试数据
16 insert into t1
17 select '2011-2-28' union all
18 select '2001-3-2' union all
19 select '2011-3-7'
20 
21 --方法二
22 SELECT *,convert(datetime,convert(nvarchar(4),year(getdate()))+'-'+convert(nvarchar(4),month(dbirth))+'-'+convert(nvarchar(4),day(dbirth))) as newbirth 
23 FROM t1 
24 where convert(datetime,convert(nvarchar(4),year(getdate()))+'-'+convert(nvarchar(4),month(dbirth))+'-'+convert(nvarchar(4),day(dbirth))) >= getdate() 
25 and convert(datetime,convert(nvarchar(4),year(getdate()))+'-'+convert(nvarchar(4),month(dbirth))+'-'+convert(nvarchar(4),day(dbirth))) <= getdate() + 7
26 
27 --方法一
28 Select * from t1
29 Where DateAdd(year,Year(Getdate())-Year(dbirth),dbirth)
30 Between Convert(Varchar(10),Getdate(),120)
31 And Convert(Varchar(10),Getdate()+7,120)

,当初怎么没想到啊,看来得积攒点这些原先玩的东西,难道自己老了?

原文地址:https://www.cnblogs.com/tippoint/p/2369749.html