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 查询获取本月所有客户的生日的主要内容,如果未能解决你的问题,请参考以下文章