zoukankan      html  css  js  c++  java
  • sql语句获取今天、昨天、近7天、本周、上周、本月、上月、半年数据

    sql语句获取今天、昨天、近7天、本周、上周、本月、上月、半年数据

    01    话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下:
    02     
    03    1    select * from `article` where date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d');
    04    或者:
    05     
    06    1    select * from `article` where to_days(date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d')) = to_days(now());
    07    假设以上表的add_time字段的存储类型是DATETIME类型或者TIMESTAMP类型,则查询语句也可按如下写法:
    08     
    09    查询今天的信息记录:
    10     
    11    1    select * from `article` where to_days(`add_time`) = to_days(now());
    12    查询昨天的信息记录:
    13     
    14    1    select * from `article` where to_days(now()) – to_days(`add_time`) <= 1;
    15    查询近7天的信息记录:
    16     
    17    1    select * from `article` where date_sub(curdate(), INTERVAL 7 DAY) <= date(`add_time`);
    18    查询近30天的信息记录:
    19     
    20    1    select * from `article` where date_sub(curdate(), INTERVAL 30 DAY) <= date(`add_time`);
    21    查询本月的信息记录:
    22     
    23    1    select * from `article` where date_format(`add_time`, ‘%Y%m') = date_format(curdate() , ‘%Y%m');
    24    查询上一月的信息记录:
    25     
    26    1    select * from `article` where period_diff(date_format(now() , ‘%Y%m') , date_format(`add_time`, ‘%Y%m')) =1;
    27    对上面的SQL语句中的几个函数做一下分析:
    28     
    29    (1)to_days
    30     
    31    就像它的名字一样,它是将具体的某一个日期或时间字符串转换到某一天所对应的unix时间戳,如:
    32     
    33    01   mysql> select  to_days('2010-11-22 14:39:51');     
    34    02    +--------------------------------+                                                       
    35    03   | to_days('2010-11-22 14:39:51') |
    36    04   +--------------------------------+
    37    05   |                         734463 |
    38    06   +--------------------------------+
    39    07   
    40    08   mysql> select  to_days('2010-11-23 14:39:51');
    41    09   +--------------------------------+
    42    10   | to_days('2010-11-23 14:39:51') |
    43    11   +--------------------------------+
    44    12   |                         734464 |
    45    13   +--------------------------------+
    46    可以看出22日与23日的差别就是,转换之后的数增加了1,这个粒度的查询是比较粗糙的,有时可能不能满足我们的查询要求,那么就需要使用细粒度的查询方法str_to_date函数了,下面将分析这个函数的用法。
    47     
    48    提醒:
    49     
    50    (1)to_days() 不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被考虑在内。因此对于1582 年之前的日期(或许在其它地区为下一年 ), 该函数的结果实不可靠的。
    51      
    52    (2)MySQL"日期和时间类型"中的规则是将日期中的二位数年份值转化为四位。因此对于'1997-10-07'和'97-10-07'将被视为同样的日期:
    53     
    54    1    mysql> select to_days('1997-10-07'), to_days('97-10-07');
    55    2    
    56    3    -> 729669, 729669
    57    (2)str_to_date
    58     
    59    这个函数可以把字符串时间完全的翻译过来,如:
    60     
    61    1    mysql> select str_to_date("2010-11-23 14:39:51",'%Y-%m-%d %H:%i:%s');
    62    2    
    63    3    +--------------------------------------------------------+
    64    4    | str_to_date("2010-11-23 14:39:51",'%Y-%m-%d %H:%i:%s') |
    65    5    +--------------------------------------------------------+
    66    6    | 2010-11-23 14:39:51                                    |
    67    7    +--------------------------------------------------------+
    68    具体案例操作如下:
    69     
    70    1    select str_to_date(article.`add_time`,'%Y-%m-%d %H:%i:%s')
    71    2    from article
    72    3    where str_to_date(article.`add_time`,'%Y-%m-%d %H:%i:%s')>='2012-06-28 08:00:00' and str_to_date(article.`add_time`,'%Y-%m-%d %H:%i:%s')<='2012-06-28 09:59:59';
    
    查询
    今天
    select * from 表名 where to_days(时间字段名) = to_days(now());  
    昨天
     
    SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) – TO_DAYS( 时间字段名) <= 1  
    7天
     
    SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)  
    近30天
     
    SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名) 
    
    本月
     
    SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, ‘%Y%m’ ) = DATE_FORMAT( CURDATE( ) , ‘%Y%m’ )  
    上一月
     
    SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , ‘%Y%m’ ) , date_format( 时间字段名, ‘%Y%m’ ) ) =1  
    同时,再附上 一个 mysql官方的相关document
    
    #查询本季度数据
    select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());
    #查询上季度数据
    select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
    #查询本年数据
    select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());
    #查询上年数据
    select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year));
     
    查询当前这周的数据 
    SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());
    查询上周的数据
    SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;
    查询当前月份的数据
    select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')
    查询距离当前现在6个月的数据
    select name,submittime from enterprise where submittime between date_sub(now(),interval 6 month) and now();
    查询上个月的数据
    select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
    select * from ` user ` where DATE_FORMAT(pudate, ' %Y%m ' ) = DATE_FORMAT(CURDATE(), ' %Y%m ' ) ;
    select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now())
    select * 
    from user 
    where MONTH (FROM_UNIXTIME(pudate, ' %y-%m-%d ' )) = MONTH (now())
    select * 
    from [ user ] 
    where YEAR (FROM_UNIXTIME(pudate, ' %y-%m-%d ' )) = YEAR (now())
    and MONTH (FROM_UNIXTIME(pudate, ' %y-%m-%d ' )) = MONTH (now())
    select * 
    from [ user ] 
    where pudate between 上月最后一天
    and 下月第一天
    where   date(regdate)   =   curdate();
    select   *   from   test   where   year(regdate)=year(now())   and   month(regdate)=month(now())   and   day(regdate)=day(now())
    SELECT date( c_instime ) ,curdate( )
    FROM `t_score`
    WHERE 1
    LIMIT 0 , 30
    

    转:https://www.cnblogs.com/xiaoqian1993/p/5260789.html

  • 相关阅读:
    数据库表结构变动发邮件脚本
    .net程序打包部署
    无法登陆GitHub解决方法
    netbeans 打包生成 jar
    第一次值班
    RHEL6 纯命令行文本界面下安装桌面
    C语言中格式化输出,四舍五入类型问题
    I'm up to my ears
    How to boot ubuntu in text mode instead of graphical(X) mode
    the IP routing table under linux@school
  • 原文地址:https://www.cnblogs.com/geoffreygao/p/14775701.html
Copyright © 2011-2022 走看看