Wes*_*ice 5 sql sql-server-2005
这一个现在已经让我烦恼了一会儿.最近在重新审视我几年前为客户写的一些代码时,我想知道是否有一个更优雅的解决方案来解决这个问题.
客户存储他们所有客户的信息,包括出生日期(日期时间字段)
他们每周一运行一次提取,检索任何生日将在下一周内生效的客户.
即,如果提取物是在1月1日星期一运行的,则将检索生日落在(包括)1月8日星期一 - > 1月14日星期日之间的顾客.
我的解决方案是使用Datepart(dy)函数并根据客户出生日期转换为每年的日期计算所有即将到来的生日,添加一些逻辑以包括在一年结束时运行的提取.问题是,如果客户出生在闰年和/或提取物在2月29日之后的闰年运行,那么使用Day of year抛出结果会产生1天的结果,所以再一次我不得不添加更多的逻辑所以程序返回了预期的结果.
对于应该是一个简单的任务来说,这似乎相当过分.为了简单起见,我们假设表'customer'包含4个字段,名字,姓氏,dob和地址.
关于如何简化这一点的任何建议都将非常感激
韦斯
这样的事情对你有用吗?
select * from Customers c
where dateadd(year, 1900-year(dob), dob)
between dateadd(year, 1900-year(getdate()), getdate())
and dateadd(year, 1900-year(getdate()), getdate())+7
Run Code Online (Sandbox Code Playgroud)