查找下个月的生日

时间:2018-09-29 02:47:50

标签: sql

在寻找一个月内即将到来的生日时,我需要帮助。 我的数据如下所示,两种数据类型均为nvarchar

enter image description here 谁能帮助我进行sql查询吗?如何将DOB列设置为日期格式,然后找到月份为11且日期为24的生日。 预先感谢

4 个答案:

答案 0 :(得分:0)

假设使用SQL Server,则可以使用month()从日期中提取月份,例如getdate(),这是当前时间点。使用left()可以提取字符串的前几个字符。导致类似:

SELECT [Name],
       [Dob(mmdd)]
       FROM elbat
       WHERE month(getdate()) = left([Dob(mmdd)], 2);

答案 1 :(得分:0)

在Microsoft SQL Server中,您可以使用DATEFROMPARTS(int year, int month, int day)函数创建日期。要获取月份和日期,您必须获取字符串的2部分,其中月份的前2个字符以及日期的第3和第4个字符,您可以使用SUBSTRING函数。然后将每个月和日的字符对转换为int并在DATEFROMPARTS函数中使用它们。

然后,您要查看新创建的日期是否是今天BETWEEN的今天AND,距离今天是一个月。因此,您可以执行以下操作:

SELECT *
FROM SomeTable
WHERE 
    DATEFROMPARTS(YEAR(GETDATE()), CAST(SUBSTRING([Dob(mmdd)], 1, 2) as INT), CAST(SUBSTRING([Dob(mmdd)], 3, 2) as INT))
    BETWEEN
    DATEADD(DAY, -1, GETDATE()) AND DATEADD(MONTH, 1, GETDATE())

注意:假设[Dob(mmdd)]始终为4个字符。

答案 2 :(得分:0)

您不需要日期格式的DOB。我不清楚“即将到来的”月份是什么意思,但是我怀疑这意味着一个日历月。如果是当前月份,则:

where month(getdate()) = cast(left(dob, 2) as int)

如果下个月,那么:

where month(dateadd(month, 1, getdate())) = cast(left(dob, 2) as int)

答案 3 :(得分:0)

谢谢大家的帮助。两者都完美

从[dbo]中选择[USER_ID],[EMP_FULL_NM],[生日_日期]。[COE] 其中month(getdate())= left([Birthday_Date],2)

从[dbo]中选择[USER_ID],[JOINING_DT],[EMP_FULL_NM]。[COE]    其中SUBSTRING(CONVERT(VARCHAR(10),[JOINING_DT],101),1,2)= month(getdate())