SQL Date Diff忽略年份

时间:2011-03-07 12:13:37

标签: sql sql-server tsql

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

由于

3 个答案:

答案 0 :(得分:5)

您可以将DATEPART函数与dayofyear datepart值一起使用。

编辑:老实说,我之前的回答中存在边界问题(非常感谢Damien):例如: 2010-12-252011-01-07 =&gt;差异应小于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
)

在第一个日期的月份部分为12月的情况下,每个日期增加一个月,并比较差异。

答案 1 :(得分:2)

一种常见的方法是将格式化的日期组成文本,并将年份替换为当前年份;并解析回日期。对此应用约会。

如果你发现dateiff返回的东西是负面因此今年的生日是过去的,加1年,然后再试一次。这是新年前后的时间段。

答案 2 :(得分:0)

SELECT *
FROM dbo.CheckBirthDay
WHERE (CASE WHEN YEAR(BirthDay) <= YEAR(CURRENT_TIMESTAMP) THEN DATEDIFF(DD,BirthDay,CURRENT_TIMESTAMP) END < 30 )
相关问题