当前位置: 首页 > news >正文

mysql获取最近几天生日的用户

需求:

获取最近7天生日的用户,并且从近到远排序。

如果使用mysql查询,如何实现呢?

看了一堆帖子,没一个说到点子上。顿时感觉程序员水平确实良莠不齐,甚至有一些还在误人子弟。

问了ai大模型,更是不尽人意。

遂自己整一个。

CREATE TABLE `kf_studio_member`
(
`id_` bigint(20) NOT NULL COMMENT 'id',
`birth_day_` date DEFAULT NULL COMMENT '生日',
`create_time_` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time_` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id_`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='会员信息';


select * from (
#不跨年
SELECT id_, DATEDIFF(CAST(CONCAT(YEAR(CURRENT_DATE),DATE_FORMAT(birth_day_,'-%m-%d'))AS DATE),CAST(DATE_FORMAT(CURRENT_DATE,'%y-%m-%d') AS DATE)) diff FROM kf_studio_member 
and DATEDIFF(CAST(CONCAT(YEAR(CURRENT_DATE),DATE_FORMAT(birth_day_,'-%m-%d'))AS DATE),CAST(DATE_FORMAT(CURRENT_DATE,'%y-%m-%d') AS DATE)) BETWEEN 0 AND 7
UNION all   
#跨年
SELECT id_, DATEDIFF(CAST(CONCAT(YEAR(CURRENT_DATE)+1,DATE_FORMAT(birth_day_,'-%m-%d'))AS DATE),CAST(DATE_FORMAT(CURRENT_DATE,'%y-%m-%d') AS DATE)) diff  FROM kf_studio_member
and DATEDIFF(CAST(CONCAT(YEAR(CURRENT_DATE)+1,DATE_FORMAT(birth_day_,'-%m-%d'))AS DATE),CAST(DATE_FORMAT(CURRENT_DATE,'%y-%m-%d') AS DATE)) BETWEEN 0 AND 7) t order by diff

为什么你写的有问题?因为你没有考虑跨年的情况:

如今天是12月28号,最近7天,是不是就到明年1月份去了?

如你所见,是的,这个sql效率不高。

适用于数据量少,或查询范围限定之后数据量少的情况。


http://www.mrgr.cn/news/39837.html

相关文章:

  • linux系统中ps命令的使用
  • Qt QIntValidator详解
  • 如何构建一个生产级的AI平台(4)?
  • QT对QBytearray的data()指针进行结构体转换时会自动字节对齐填充
  • Electron 进程通信
  • 高效视频编码标准H.265介绍,以及H.265在视频监控共享平台中的应用
  • 全解析:如何评估PLM系统的性价比?
  • 仕考网:事业单位考试选岗小技巧!
  • 【含文档】基于Springboot+Vue的工资管理系统(含源码+数据库+lw)
  • 用责任链模式改造 if else
  • 达力士得肤宝与生物制剂在银屑病中的搭配使用
  • 测试开发面试题:浏览器输入url之后的过程
  • Find My储物盒|苹果Find My技术与储物盒结合,智能防丢,全球定位
  • GIS中的投影坐标系
  • 数商云B2B2C商城系统如何帮企业降本增效
  • 敏感内容识别是如何实现的?5大妙招教你快速筛选敏感词!
  • 经典文献阅读之--WiROS(用于机器人的WiFi感知工具箱)
  • 通过PHP获取商品详情
  • Chris,36岁勇辞管理,重回开发:一场高龄远程工作者有违常理的自我追寻。
  • Python字典推导式