取最近 10 天内要过生日的用户, sql 该怎么写?

2015-06-09 21:51:31 +08:00
 vinsony
已经有个DATE类型的生日字段了
现在主要是跨年的时候,不能单纯只比较日期。
有大神在吗?
5501 次点击
所在节点    MySQL
20 条回复
zwzmzd
2015-06-09 21:55:04 +08:00
gamexg
2015-06-09 22:02:23 +08:00
Date索引用不上吧?
变成全表扫描了
xuyl
2015-06-09 22:08:05 +08:00
跨年也好办啊,转化为unix时间戳再比较呗。
vinsony
2015-06-09 22:08:37 +08:00
@zwzmzd 这个只能获取2个日期之间的吧,生日可是忽略年份只比较月日的哦。
wd0g
2015-06-09 22:17:16 +08:00
@vinsony 在建一个字段?
hiboshi
2015-06-09 22:25:43 +08:00
format db 的 生日字段
BETWEEN 或者 大于当前时间 并且 小于 当前时间+30天
Paranoid
2015-06-09 22:28:18 +08:00
为啥用sql写?

用程序计算出 过生日的日期,再查询。
vinsony
2015-06-09 22:31:14 +08:00
实际上是这样,比如今天是2015-12-25,那么要取的用户生日就是
2015-12-25至2016-01-03
2014-12-25至2015-01-03
2013-12-25至2014-01-03
......
vinsony
2015-06-09 22:35:36 +08:00
@Paranoid 像你说的,这个怎么查呢?
marvinwilliam
2015-06-09 22:40:06 +08:00
在条件里面使用to_date函数转换成月日的时间然后再和指定的月日比较?怎么感觉这个好不效率的说。。。
Paranoid
2015-06-09 22:51:24 +08:00
@vinsony 我会冗余出一个字段 :P
frankyzf
2015-06-09 22:57:34 +08:00
生成10天的月日列表如1215 1216 1217... 0103,用生日的月日in列表可以吗?
frittle
2015-06-09 23:00:14 +08:00
levon
2015-06-09 23:56:01 +08:00
把生日的年改成今年,比如出生日期是“1990-10-10”,那生日就是“2015-10-10",算2015-10-10是不是最近10天就可以了。
levon
2015-06-09 23:59:10 +08:00
补充一下,如果算出的今年生日是今年过掉的日子,那下一个生日的年就应该今年+1
zoowii
2015-06-10 00:06:30 +08:00
增加一个字段记录月日好了,这样直接=比较了
free9fw
2015-06-10 09:46:10 +08:00
写个方法嘛
iyangyuan
2015-06-10 11:20:23 +08:00
只能加冗余字段了,加一个月日字段。
否则不走索引,效率太低。
phx13ye
2015-06-10 13:39:51 +08:00
DAYOFYEAR() betweein
jjplay
2015-06-10 14:18:08 +08:00
http://segmentfault.com/q/1010000002869960
Carbon 可能是 PHP 中时间处理最好的轮子了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/197334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX