前几天去面试,面试官问到了一道题,如何找到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)
,当初怎么没想到啊,看来得积攒点这些原先玩的东西,难道自己老了?