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
vinsony
V2EX  ›  MySQL

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

  •  
  •   vinsony · Jun 9, 2015 · 6069 views
    This topic created in 4005 days ago, the information mentioned may be changed or developed.
    已经有个DATE类型的生日字段了
    现在主要是跨年的时候,不能单纯只比较日期。
    有大神在吗?
    Supplement 1  ·  Jun 9, 2015
    实际上是这样,比如今天是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 replies    2015-06-10 14:18:08 +08:00
    zwzmzd
        1
    zwzmzd  
       Jun 9, 2015
    gamexg
        2
    gamexg  
       Jun 9, 2015 via Android
    Date索引用不上吧?
    变成全表扫描了
    xuyl
        3
    xuyl  
       Jun 9, 2015
    跨年也好办啊,转化为unix时间戳再比较呗。
    vinsony
        4
    vinsony  
    OP
       Jun 9, 2015
    @zwzmzd 这个只能获取2个日期之间的吧,生日可是忽略年份只比较月日的哦。
    wd0g
        5
    wd0g  
       Jun 9, 2015
    @vinsony 在建一个字段?
    hiboshi
        6
    hiboshi  
       Jun 9, 2015
    format db 的 生日字段
    BETWEEN 或者 大于当前时间 并且 小于 当前时间+30天
    Paranoid
        7
    Paranoid  
       Jun 9, 2015
    为啥用sql写?

    用程序计算出 过生日的日期,再查询。
    vinsony
        8
    vinsony  
    OP
       Jun 9, 2015
    实际上是这样,比如今天是2015-12-25,那么要取的用户生日就是
    2015-12-25至2016-01-03
    2014-12-25至2015-01-03
    2013-12-25至2014-01-03
    ......
    vinsony
        9
    vinsony  
    OP
       Jun 9, 2015
    @Paranoid 像你说的,这个怎么查呢?
    marvinwilliam
        10
    marvinwilliam  
       Jun 9, 2015
    在条件里面使用to_date函数转换成月日的时间然后再和指定的月日比较?怎么感觉这个好不效率的说。。。
    Paranoid
        11
    Paranoid  
       Jun 9, 2015
    @vinsony 我会冗余出一个字段 :P
    frankyzf
        12
    frankyzf  
       Jun 9, 2015
    生成10天的月日列表如1215 1216 1217... 0103,用生日的月日in列表可以吗?
    frittle
        13
    frittle  
       Jun 9, 2015
    levon
        14
    levon  
       Jun 9, 2015
    把生日的年改成今年,比如出生日期是“1990-10-10”,那生日就是“2015-10-10",算2015-10-10是不是最近10天就可以了。
    levon
        15
    levon  
       Jun 9, 2015
    补充一下,如果算出的今年生日是今年过掉的日子,那下一个生日的年就应该今年+1
    zoowii
        16
    zoowii  
       Jun 10, 2015
    增加一个字段记录月日好了,这样直接=比较了
    free9fw
        17
    free9fw  
       Jun 10, 2015
    写个方法嘛
    iyangyuan
        18
    iyangyuan  
       Jun 10, 2015 via iPhone
    只能加冗余字段了,加一个月日字段。
    否则不走索引,效率太低。
    phx13ye
        19
    phx13ye  
       Jun 10, 2015
    DAYOFYEAR() betweein
    jjplay
        20
    jjplay  
       Jun 10, 2015
    http://segmentfault.com/q/1010000002869960
    Carbon 可能是 PHP 中时间处理最好的轮子了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3334 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 11:14 · PVG 19:14 · LAX 04:14 · JFK 07:14
    ♥ Do have faith in what you're doing.