代码之家  ›  专栏  ›  技术社区  ›  Aaron Fischer

每月生日SQL查询

  •  1
  • Aaron Fischer  · 技术社区  · 16 年前

    如何在SQL中检索给定月份的所有客户生日?MySQL呢? 我正在考虑将以下内容用于SQL Server。

    select c.name   
    from cust c
    where  datename(m,c.birthdate) = datename(m,@suppliedDate)
    order by c.name
    
    4 回复  |  直到 16 年前
        1
  •  5
  •   nickf    16 年前

    别忘了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))
    )
    
        2
  •  2
  •   rickripe    16 年前

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

        3
  •  2
  •   AJ.    16 年前

    如果你要一个给定的生日 ,那么您应该提供 不是 日期 :

    SELECT c.name
    FROM   cust c
    WHERE  datepart(m,c.birthdate) = @SuppliedMonth
    
        4
  •  1
  •   Michael Johnson    16 年前

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

    所以,我要添加BirthMonth列(索引),然后(使用可能的mysqlisms):

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

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