发布网友 发布时间:2022-04-25 13:08
共2个回答
懂视网 时间:2022-05-02 15:23
1. 不跨年
例如: 查询2017-01-01到2017-01-20之间过生日的会员 (假定今天是2017-01-01则这种也可以描述为20天内过生日的会员)
select * from user where DATE_FORMAT(birthday,‘%m-%d‘) between ‘01-01‘ and ‘01-20‘
2. 跨年
例如: 查询2017-12-27到2018-01-05之间过生日的会员, (假定今天是2017-12-27则这种也可以描述为10天内过生日的会员)
这里取今年的起始时间与今年的最后一天做为1组条件,2017-12-27到2017-12-31; 取下年的第一天到下年的结束做为1组条件:2018-01-01到2018-01-05
select * from user where (DATE_FORMAT(birthday,‘%m-%d‘) between ‘12-27‘ and ‘12-31‘ OR DATE_FORMAT(birthday,‘%m-%d‘) between ‘01-01‘ and ‘01-05‘ )
分析了两种查询生日的情况, 还有一种情况是闰年生日的情况,留到下次再说.
抛砖引玉,大家有好的方案欢迎交流.
MySql查询生日的两种方式
标签:str where use mysql查询 post 需要 条件 log 方案
热心网友 时间:2022-05-02 12:31
查询一段时间内过生日的员工,是一个日期的比较的过程,所以只要在where 子句添加时间的筛选即可。
一、语句会用到convert()函数
CONVERT() 函数功能 :
1、把日期转换为新数据类型的通用函数。
2、用不同的格式显示日期/时间数据。
语法:CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
可以使用的 style 值:
二、例表格:ygsrb,表结构如下
三、例如查询4月份生日的员工,也就是csrq的日期大等于4月1日,小于5月1日,那么SQL语句就可以这样写:
select * from ygsrb where四、语句解析:
convert(char(10),csrq,112):将日期转换成 ‘yyyymmdd’格式
right(convert(char(10),csrq,112),4):截取转换后的时间右边4位“mmdd”
运行结果: