首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server中的生日提醒

Server中的生日提醒
EN

Stack Overflow用户
提问于 2015-10-11 04:52:47
回答 2查看 1.2K关注 0票数 1

我想选择那些出生日期与当前系统日期相匹配的人。

我的SQL查询是:

代码语言:javascript
复制
select testtable.task 
from testtable 
where testtable.dates like (select SUBSTRING(CONVERT(varchar(10), GETDATE(), 10), 1, 5))

我是用Server编写的。

问题是它没有返回任何数据,但是内部子查询运行得非常好。

请指定日期作为字符串存储和日期以日期类型存储的情况下的解决方案。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-11 05:06:42

假设testtable.datesDate DateTimeDateTime2类型,您可以简单地使用以下查询:

代码语言:javascript
复制
select testtable.task 
from testtable 
where month(testtable.dates) = month(getdate())
and day(testtable.dates) = day(getdate())
票数 1
EN

Stack Overflow用户

发布于 2021-10-20 14:31:29

接受的解决方案不考虑跃年,因此,如果一个人的生日是2020年-02-29,他将只得到通知每4年。

此查询返回非闰年,即02/29生日,即02/28生日,与大多数国家和社会媒体一样。

MariaDB/MySQL:

代码语言:javascript
复制
SELECT
    *
FROM 
    Employees
WHERE
CASE
    WHEN MONTH(CURDATE()) = 2 AND DAY(CURDATE()) = 28
        AND DAY(ADDDATE(CURDATE(), 1)) != 29
    THEN MONTH(Employees.DateOfBirth) = 2 AND 
        DAY(Employees.DateOfBirth) IN (28, 29)
    ELSE MONTH(Employees.DateOfBirth) = MONTH(CURDATE()) AND 
        DAY(Employees.DateOfBirth) = DAY(CURDATE())
END

MsSQL:

代码语言:javascript
复制
SELECT
    *
FROM 
    Employees
WHERE
    (MONTH(GETDATE()) = 2 AND DAY(GETDATE()) = 28 AND DAY(DATEADD(day, 1, GETDATE())) != 29) AND
    (MONTH(Employees.DateOfBirth) = 2 AND DAY(Employees.DateOfBirth) IN (28, 29))
    OR
    NOT (MONTH(GETDATE()) = 2 AND DAY(GETDATE()) = 28 AND DAY(DATEADD(day, 1, GETDATE())) != 29) AND
    (MONTH(Employees.DateOfBirth) = MONTH(GETDATE()) AND DAY(Employees.DateOfBirth) = DAY(GETDATE()))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33061661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档