每月生日SQL查询

时间:2008-09-22 02:31:10

标签: sql mysql

如何在SQL中检索给定月份的所有客户的生日? MySQL怎么样? 我正在考虑将以下内容与SQL服务器一起使用。

select c.name   
from cust c
where  datename(m,c.birthdate) = datename(m,@suppliedDate)
order by c.name

5 个答案:

答案 0 :(得分:5)

不要忘记2月29日...

SELECT c.name
FROM cust c
WHERE (
    MONTH(c.birthdate) = MONTH(@suppliedDate)
    AND DAY(c.birthdate) = DAY(@suppliedDate)
) OR (
    MONTH(c.birthdate) = 2 AND DAY(c.birthdate) = 29
    AND MONTH(@suppliedDate) = 3 AND DAY(@suppliedDate) = 1
    AND (YEAR(@suppliedDate) % 4 = 0) AND ((YEAR(@suppliedDate) % 100 != 0) OR (YEAR(@suppliedDate) % 400 = 0))
)

答案 1 :(得分:2)

我个人会使用DATEPART而不是DATENAME,因为DATENAME可以根据语言环境进行解释。

答案 2 :(得分:2)

如果您要求在给定的中生日,那么您应该提供,而不是日期

SELECT c.name
FROM   cust c
WHERE  datepart(m,c.birthdate) = @SuppliedMonth

答案 3 :(得分:1)

如果您希望客户列表变得非常大,我实际上很想添加一个出生月列。到目前为止,我所看到的查询(包括示例)将需要全表扫描,因为您将数据列传递给函数并进行比较。如果该表具有任何大小,这可能需要相当长的时间,因为没有索引能够提供帮助。

所以,我会添加birthmonth列(索引)并且只是(可能有MySQLisms):

SELECT name
FROM  cust
WHERE birthmonth = MONTH(NOW())
ORDER BY name;

当然,使用触发器或客户端代码设置birthmonth列应该很容易。

答案 4 :(得分:0)

 SELECT *  FROM tbl_Employee  WHERE DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DOB), DOB)  BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30)

这可以用来按天获取即将到来的生日