SQL 查询获取本月所有客户的生日

Posted

技术标签:

【中文标题】SQL 查询获取本月所有客户的生日【英文标题】:SQL Query to get all clients birthdays for this month 【发布时间】:2020-11-09 18:49:04 【问题描述】:

我正在尝试创建一个显示本月出生的所有客户的查询,但我得到:

从字符串转换日期和/或时间时转换失败。"

这是我的代码。

SELECT 
    t.Client_id, t.Name
FROM
    (SELECT  
         Client_id,
         C_name + ' ' + C_surname AS Name,
         CONVERT(INT, SUBSTRING(Client_id, 3, 2)) AS M,
         CONVERT(INT, SUBSTRING(Client_id, 5, 2)) AS D,
         CONVERT(DATE, CONVERT(VARCHAR, CONVERT(CHAR(4), DATEPART(YEAR, GETDATE())) + '-' + SUBSTRING(Client_id, 3, 2) + '-' + SUBSTRING(Client_id, 5, 2))) AS DateOfBirth
     FROM 
         tblClientInfo) T
WHERE 
    T.M <= 12 
    AND T.DateOfBirth = CONVERT(DATE, GETDATE());

我尝试输入CONVERT(varchar, getdate()),但仍然出错

这个只适用于提取今天的生日:

SELECT 
    t.Client_id, t.Name
FROM
    (SELECT  
         Client_id,
         C_name + ' ' + C_surname AS Name,
         CONVERT(INT, SUBSTRING(Client_id, 3, 2)) AS M,
         CONVERT(INT, SUBSTRING(Client_id, 5, 2)) AS D,
         CONVERT(DATE, CONVERT(VARCHAR, CONVERT(CHAR(4), DATEPART(YEAR, GETDATE())) + '-' + SUBSTRING(Client_id, 3, 2) + '-' + SUBSTRING(Client_id, 5, 2))) AS DateOfBirth
     FROM 
         tblClientInfo) T
WHERE 
    T.D <= 31 
    AND T.M <= 12 
    AND T.DateOfBirth = CONVERT(DATE, GETDATE());

【问题讨论】:

请提供样本数据和期望的结果。 列名Client_id 暗示一个数值,暗示它是某种标识符。然而,您的逻辑将其视为(或转换)为包含表示日期的格式化值的字符串。这里似乎有些不对劲。 @SM 或 Client _id 的前 6 个数字是生日,例如900829 平均 1990 年 8 月 29 日 【参考方案1】:

试试这个:

select *
from tblClientInfo
where  CAST(SUBSTRING(Client_id, 3, 2) AS TINYINT) = month(getdate());

【讨论】:

【参考方案2】:

嗯。 . .我在想:

select c.*
from tblClientInfo c
where month(dateofbirth) = month(getdate());

【讨论】:

以上是关于SQL 查询获取本月所有客户的生日的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 获取本月内的所有周一

SQL获取本周本月本季度的记录的语句

SQL Server 获取本周,本月,本年等时间内记录

SQL Server 获取本周,本月,本年等时间内记录

sql语句获取今天昨天近7天本周上周本月上月半年数据

数据库怎么查出本月过生日的同学