在寻找一个月内即将到来的生日时,我需要帮助。 我的数据如下所示,两种数据类型均为nvarchar
答案 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())