SQL Date Diff忽略年份

And*_*dez 1 sql t-sql sql-server

我想做一个选择,用户的生日(日期字段)少于30天.
最好的方法是什么?我试过约会,但我不知道怎么把年份放在一边.

谢谢

Ale*_*lex 5

你可以使用DATEPART带有dayofyeardatepart值的函数.

编辑:说实话,我之前的答案中存在边界问题(非常感谢Damien):例如2010-12-252011-01-07=>差异应该小于30天,但DATEPART(dayofyear, @date) - DATEPART(dayofyear, [Birthday]) < 30条件会跳过此记录.所以我在答案中增加了一个额外的答案:

DATEPART(dy, @d) - DATEPART(dy, [Birthday]) < 30 OR
(
   DATEPART(mm, @d) = 12 AND
   DATEPART(dy, DATEADD(m, 1, @d)) - DATEPART(dy, DATEADD(m, 1, [Birthday])) < 30
)
Run Code Online (Sandbox Code Playgroud)

在第一个日期的月份部分是12月的情况下,它会在每个日期添加一个月,并比较差异.