首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
V2EX  ›  MySQL

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

  •  
  •   vinsony · 2015-06-09 21:51:31 +08:00 · 3606 次点击
    这是一个创建于 1136 天前的主题,其中的信息可能已经有所发展或是发生改变。
    已经有个DATE类型的生日字段了
    现在主要是跨年的时候,不能单纯只比较日期。
    有大神在吗?
    第 1 条附言  ·  2015-06-09 22:34:04 +08:00
    实际上是这样,比如今天是2015-12-25,那么用户生日字段就是下面这种,分成了N个时间段
    2015-12-25至2016-01-03
    2014-12-25至2015-01-03
    2013-12-25至2014-01-03
    2012-12-25至2013-01-03
    ......

    sql不太擅长,大概就是这个意思。
    20 回复  |  直到 2015-06-10 14:18:08 +08:00
        1
    zwzmzd   2015-06-09 21:55:04 +08:00
        2
    gamexg   2015-06-09 22:02:23 +08:00 via Android
    Date索引用不上吧?
    变成全表扫描了
        3
    xuyl   2015-06-09 22:08:05 +08:00
    跨年也好办啊,转化为unix时间戳再比较呗。
        4
    vinsony   2015-06-09 22:08:37 +08:00
    @zwzmzd 这个只能获取2个日期之间的吧,生日可是忽略年份只比较月日的哦。
        5
    wd0g   2015-06-09 22:17:16 +08:00
    @vinsony 在建一个字段?
        6
    hiboshi   2015-06-09 22:25:43 +08:00
    format db 的 生日字段
    BETWEEN 或者 大于当前时间 并且 小于 当前时间+30天
        7
    Paranoid   2015-06-09 22:28:18 +08:00
    为啥用sql写?

    用程序计算出 过生日的日期,再查询。
        8
    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
    ......
        9
    vinsony   2015-06-09 22:35:36 +08:00
    @Paranoid 像你说的,这个怎么查呢?
        10
    marvinwilliam   2015-06-09 22:40:06 +08:00
    在条件里面使用to_date函数转换成月日的时间然后再和指定的月日比较?怎么感觉这个好不效率的说。。。
        11
    Paranoid   2015-06-09 22:51:24 +08:00
    @vinsony 我会冗余出一个字段 :P
        12
    frankyzf   2015-06-09 22:57:34 +08:00
    生成10天的月日列表如1215 1216 1217... 0103,用生日的月日in列表可以吗?
        13
    frittle   2015-06-09 23:00:14 +08:00
        14
    levon   2015-06-09 23:56:01 +08:00
    把生日的年改成今年,比如出生日期是“1990-10-10”,那生日就是“2015-10-10",算2015-10-10是不是最近10天就可以了。
        15
    levon   2015-06-09 23:59:10 +08:00
    补充一下,如果算出的今年生日是今年过掉的日子,那下一个生日的年就应该今年+1
        16
    zoowii   2015-06-10 00:06:30 +08:00
    增加一个字段记录月日好了,这样直接=比较了
        17
    free9fw   2015-06-10 09:46:10 +08:00
    写个方法嘛
        18
    iyangyuan   2015-06-10 11:20:23 +08:00 via iPhone
    只能加冗余字段了,加一个月日字段。
    否则不走索引,效率太低。
        19
    phx13ye   2015-06-10 13:39:51 +08:00
    DAYOFYEAR() betweein
        20
    jjplay   2015-06-10 14:18:08 +08:00
    http://segmentfault.com/q/1010000002869960
    Carbon 可能是 PHP 中时间处理最好的轮子了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   680 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 19:25 · PVG 03:25 · LAX 12:25 · JFK 15:25
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1