精华内容
下载资源
问答
  • 获得当前日期+时间(date + time)1.1 函数:now()  相关函数:current_timestamp(),localtime(),localtimestamp()  举例说明:  2. 获得当前日期(date)  函数:curdate()  相关函数:current_date()...
  • MySQL日期时间函数大全
  • 主要介绍了mysql 获取当前日期函数now()及时间格式化DATE_FROMAT函数以及参数详细介绍,需要的朋友可以参考下
  • MySQL日期时间处理函数

    万次阅读 多人点赞 2017-06-06 09:19:39
    MySQL日期时间处理函数

    以下基本包含MySQL所有日期时间函数

    -- MySQL日期时间处理函数
    -- 当前日期:2017-05-12(突然发现今天512,是不是会拉防空警报)
    SELECT NOW() FROM DUAL;-- 当前日期时间:2017-05-12 11:41:47
    -- 在MySQL里也存在和Oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用。
    -- 那么MySQL中就不用DUAL了吧。
    SELECT NOW();-- 当前日期时间:2017-05-12 11:41:55
    -- 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:
    SELECT CURRENT_TIMESTAMP();-- 2017-05-15 10:19:31
    SELECT CURRENT_TIMESTAMP;-- 2017-05-15 10:19:51
    SELECT LOCALTIME();-- 2017-05-15 10:20:00
    SELECT LOCALTIME;-- 2017-05-15 10:20:10
    SELECT LOCALTIMESTAMP();-- 2017-05-15 10:20:21(v4.0.6)
    SELECT LOCALTIMESTAMP;-- 2017-05-15 10:20:30(v4.0.6)
    -- 这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now()来替代上面列出的函数。
    
    SELECT SYSDATE();-- 当前日期时间:2017-05-12 11:42:03
    -- sysdate() 日期时间函数跟 now() 类似,
    -- 不同之处在于:now() 在执行开始时值就得到了;sysdate() 在函数执行时动态得到值。
    -- 看下面的例子就明白了:
    SELECT NOW(), SLEEP(3), NOW();
    SELECT SYSDATE(), SLEEP(3), SYSDATE();
    
    
    SELECT CURDATE();-- 当前日期:2017-05-12
    SELECT CURRENT_DATE();-- 当前日期:等同于 CURDATE()
    SELECT CURRENT_DATE;-- 当前日期:等同于 CURDATE()
    
    SELECT CURTIME();-- 当前时间:11:42:47
    SELECT CURRENT_TIME();-- 当前时间:等同于 CURTIME()
    SELECT CURRENT_TIME;-- 当前时间:等同于 CURTIME()
    
    -- 获得当前 UTC 日期时间函数
    SELECT UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME()
    -- MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()
    SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP();-- 2017-05-15 10:32:21 | 2017-05-15 10:32:21
    
    
    -- MySQL 日期时间 Extract(选取) 函数
    SET @dt = '2017-05-15 10:37:14.123456';
    SELECT DATE(@dt);-- 获取日期:2017-05-15
    SELECT TIME('2017-05-15 10:37:14.123456');-- 获取时间:10:37:14.123456
    SELECT YEAR('2017-05-15 10:37:14.123456');-- 获取年份
    SELECT MONTH('2017-05-15 10:37:14.123456');-- 获取月份
    SELECT DAY('2017-05-15 10:37:14.123456');-- 获取日
    SELECT HOUR('2017-05-15 10:37:14.123456');-- 获取时
    SELECT MINUTE('2017-05-15 10:37:14.123456');-- 获取分
    SELECT SECOND('2017-05-15 10:37:14.123456');-- 获取秒
    SELECT MICROSECOND('2017-05-15 10:37:14.123456');-- 获取毫秒
    SELECT QUARTER('2017-05-15 10:37:14.123456');-- 获取季度
    SELECT WEEK('2017-05-15 10:37:14.123456');-- 20 (获取周)
    SELECT WEEK('2017-05-15 10:37:14.123456', 7);-- ****** 测试此函数在MySQL5.6下无效
    SELECT WEEKOFYEAR('2017-05-15 10:37:14.123456');-- 同week()
    SELECT DAYOFYEAR('2017-05-15 10:37:14.123456');-- 135 (日期在年度中第几天)
    SELECT DAYOFMONTH('2017-05-15 10:37:14.123456');-- 5 (日期在月度中第几天)
    SELECT DAYOFWEEK('2017-05-15 10:37:14.123456');-- 2 (日期在周中第几天;周日为第一天)
    SELECT WEEKDAY('2017-05-15 10:37:14.123456');-- 0
    SELECT WEEKDAY('2017-05-21 10:37:14.123456');-- 6(与dayofweek()都表示日期在周的第几天,只是参考标准不同,weekday()周一为第0天,周日为第6天)
    SELECT YEARWEEK('2017-05-15 10:37:14.123456');-- 201720(年和周)
    
    SELECT EXTRACT(YEAR FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(MONTH FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(DAY FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(HOUR FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(MINUTE FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(SECOND FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(MICROSECOND FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(QUARTER FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(WEEK FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(YEAR_MONTH FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(DAY_HOUR FROM '2017-05-15 10:37:14.123456');
    SELECT EXTRACT(DAY_MINUTE FROM '2017-05-15 10:37:14.123456');-- 151037(日时分)
    SELECT EXTRACT(DAY_SECOND FROM '2017-05-15 10:37:14.123456');-- 15103714(日时分秒)
    SELECT EXTRACT(DAY_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 15103714123456(日时分秒毫秒)
    SELECT EXTRACT(HOUR_MINUTE FROM '2017-05-15 10:37:14.123456');-- 1037(时分)
    SELECT EXTRACT(HOUR_SECOND FROM '2017-05-15 10:37:14.123456');-- 103714(时分秒)
    SELECT EXTRACT(HOUR_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 103714123456(日时分秒毫秒)
    SELECT EXTRACT(MINUTE_SECOND FROM '2017-05-15 10:37:14.123456');-- 3714(分秒)
    SELECT EXTRACT(MINUTE_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 3714123456(分秒毫秒)
    SELECT EXTRACT(SECOND_MICROSECOND FROM '2017-05-15 10:37:14.123456');-- 14123456(秒毫秒)
    -- MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。
    -- 并且还具有选取‘day_microsecond' 等功能。
    -- 注意这里不是只选取 day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分。
    
    
    SELECT DAYNAME('2017-05-15 10:37:14.123456');-- Monday(返回英文星期)
    SELECT MONTHNAME('2017-05-15 10:37:14.123456');-- May(返回英文月份)
    SELECT LAST_DAY('2016-02-01');-- 2016-02-29 (返回月份中最后一天)
    SELECT LAST_DAY('2016-05-01');-- 2016-05-31
    
    -- DATE_ADD(date,INTERVAL expr type) 从日期加上指定的时间间隔
    -- type参数可参考:http://www.w3school.com.cn/sql/func_date_sub.asp
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2018-05-15 10:37:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);-- 表示:2017-08-15 10:37:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-06-15 10:37:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);-- 表示:2017-05-22 10:37:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-16 10:37:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 11:37:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);-- 表示:2017-05-15 10:38:14.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);-- 表示:2017-05-15 10:37:15.123456
    SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);-- 表示:2017-05-15 10:37:14.123457
    
    
    -- DATE_SUB(date,INTERVAL expr type) 从日期减去指定的时间间隔
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2016-05-15 10:37:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 QUARTER);-- 表示:2017-02-15 10:37:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-04-15 10:37:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 WEEK);-- 表示:2017-05-08 10:37:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-14 10:37:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 09:37:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MINUTE);-- 表示:2017-05-15 10:36:14.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 SECOND);-- 表示:2017-05-15 10:37:13.123456
    SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MICROSECOND);-- 表示:2017-05-15 10:37:14.123455
    
    -- 经特殊日期测试,DATE_SUB(date,INTERVAL expr type)可放心使用
    SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);-- 前一天:2017-05-11
    SELECT DATE_SUB(CURDATE(),INTERVAL -1 DAY);-- 后一天:2017-05-13
    SELECT DATE_SUB(CURDATE(),INTERVAL 1 MONTH);-- 一个月前日期:2017-04-12
    SELECT DATE_SUB(CURDATE(),INTERVAL -1 MONTH);-- 一个月后日期:2017-06-12
    SELECT DATE_SUB(CURDATE(),INTERVAL 1 YEAR);-- 一年前日期:2016-05-12
    SELECT DATE_SUB(CURDATE(),INTERVAL -1 YEAR);-- 一年后日期:20178-06-12
    -- MySQL date_sub() 日期时间函数 和 date_add() 用法一致,并且可以用INTERNAL -1 xxx的形式互换使用;
    -- 另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。
    
    -- MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)
    -- 函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。
    -- MySQL period_add(P,N):日期加/减去N月。
    SELECT PERIOD_ADD(201705,2), PERIOD_ADD(201705,-2);-- 201707  20170503
    -- period_diff(P1,P2):日期 P1-P2,返回 N 个月。
    SELECT PERIOD_DIFF(201706, 201703);-- 
    -- datediff(date1,date2):两个日期相减 date1 - date2,返回天数
    SELECT DATEDIFF('2017-06-05','2017-05-29');-- 7
    -- TIMEDIFF(time1,time2):两个日期相减 time1 - time2,返回 TIME 差值
    SELECT TIMEDIFF('2017-06-05 19:28:37', '2017-06-05 17:00:00');-- 02:28:37
    
    
    -- MySQL日期转换函数
    SELECT TIME_TO_SEC('01:00:05'); -- 3605
    SELECT SEC_TO_TIME(3605);-- 01:00:05
    
    -- MySQL (日期、天数)转换函数:to_days(date), from_days(days)
    SELECT TO_DAYS('0000-00-00'); -- NULL 
    SELECT TO_DAYS('2017-06-05'); -- 736850
    SELECT FROM_DAYS(0);           -- '0000-00-00' 
    SELECT FROM_DAYS(736850);      -- '2017-06-05'
    
    -- MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)
    
    SELECT STR_TO_DATE('06.05.2017 19:40:30', '%m.%d.%Y %H:%i:%s');-- 2017-06-05 19:40:30
    SELECT STR_TO_DATE('06/05/2017', '%m/%d/%Y');                  -- 2017-06-05
    SELECT STR_TO_DATE('2017/12/3','%Y/%m/%d')		       -- 2017-12-03
    SELECT STR_TO_DATE('20:09:30', '%h:%i:%s')		       -- NULL(超过12时的小时用小写h,得到的结果为NULL)
    
    -- 日期时间格式化
    SELECT DATE_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');-- 2017年05月12日 17时03分51秒(具体需要什么格式的数据根据实际情况来;小写h为12小时制;)
    SELECT TIME_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');-- 0000年00月00日 17时03分51秒(time_format()只能用于时间的格式化)
    -- STR_TO_DATE()和DATE_FORMATE()为互逆操作
    
    -- MySQL 获得国家地区时间格式函数:get_format()
    -- MySQL get_format() 语法:get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal'
    -- MySQL get_format() 用法的全部示例:
    SELECT GET_FORMAT(DATE,'usa');   	-- '%m.%d.%Y' 
    SELECT GET_FORMAT(DATE,'jis');   	-- '%Y-%m-%d' 
    SELECT GET_FORMAT(DATE,'iso');   	-- '%Y-%m-%d' 
    SELECT GET_FORMAT(DATE,'eur');   	-- '%d.%m.%Y' 
    SELECT GET_FORMAT(DATE,'internal');   	-- '%Y%m%d' 
    SELECT GET_FORMAT(DATETIME,'usa');   	-- '%Y-%m-%d %H.%i.%s' 
    SELECT GET_FORMAT(DATETIME,'jis');   	-- '%Y-%m-%d %H:%i:%s' 
    SELECT GET_FORMAT(DATETIME,'iso');   	-- '%Y-%m-%d %H:%i:%s' 
    SELECT GET_FORMAT(DATETIME,'eur');   	-- '%Y-%m-%d %H.%i.%s' 
    SELECT GET_FORMAT(DATETIME,'internal'); -- '%Y%m%d%H%i%s' 
    SELECT GET_FORMAT(TIME,'usa');   	-- '%h:%i:%s %p' 
    SELECT GET_FORMAT(TIME,'jis');   	-- '%H:%i:%s' 
    SELECT GET_FORMAT(TIME,'iso');   	-- '%H:%i:%s' 
    SELECT GET_FORMAT(TIME,'eur');   	-- '%H.%i.%s' 
    SELECT GET_FORMAT(TIME,'internal');     -- '%H%i%s'
    
    
    -- MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)
    SELECT MAKEDATE(2017,31);   -- '2017-01-31' 
    SELECT MAKEDATE(2017,32);   -- '2017-02-01'
    SELECT MAKETIME(19,52,35);  -- '19:52:35'
    
    -- MySQL 时区(timezone)转换函数:convert_tz(dt,from_tz,to_tz)
    SELECT CONVERT_TZ('2017-06-05 19:54:12', '+08:00', '+00:00'); -- 2017-06-05 11:54:12
    
    
    -- MySQL (Unix 时间戳、日期)转换函数
    -- unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp,format)
    -- 将具体时间时间转为timestamp
    SELECT UNIX_TIMESTAMP();-- 当前时间的时间戳:1494815779
    SELECT UNIX_TIMESTAMP('2017-05-15');-- 指定日期的时间戳:1494777600
    SELECT UNIX_TIMESTAMP('2017-05-15 10:37:14');-- 指定日期时间的时间戳:1494815834
    
    -- 将时间戳转为具体时间
    SELECT FROM_UNIXTIME(1494815834);-- 2017-05-15 10:37:14
    SELECT FROM_UNIXTIME(1494815834, '%Y年%m月%d日 %h时%分:%s秒');-- 获取时间戳对应的格式化日期时间
    
    -- MySQL 时间戳(timestamp)转换、增、减函数
    SELECT TIMESTAMP('2017-05-15');-- 2017-05-15 00:00:00
    SELECT TIMESTAMP('2017-05-15 08:12:25', '01:01:01');-- 2017-05-15 09:13:26
    SELECT DATE_ADD('2017-05-15 08:12:25', INTERVAL 1 DAY);-- 2017-05-16 08:12:25
    SELECT TIMESTAMPADD(DAY, 1, '2017-05-15 08:12:25');-- 2017-05-16 08:12:25; MySQL timestampadd() 函数类似于 date_add()。
    
    SELECT TIMESTAMPDIFF(YEAR, '2017-06-01', '2016-05-15');-- -1
    SELECT TIMESTAMPDIFF(MONTH, '2017-06-01', '2016-06-15');-- -11
    SELECT TIMESTAMPDIFF(DAY, '2017-06-01', '2016-06-15');-- -351
    SELECT TIMESTAMPDIFF(HOUR, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -8432
    SELECT TIMESTAMPDIFF(MINUTE, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -505932
    SELECT TIMESTAMPDIFF(SECOND, '2017-06-01 08:12:25', '2016-06-15 00:00:00');-- -30355945

    展开全文
  • MySQL日期数据类型、MySQL时间类型使用总结,适用于 MySQL 5.X 及以上版本
  • mysql日期时间函数
  • Mysql中常用的日期时间函数

    千次阅读 2018-01-17 09:10:00
    日期时间函数 可能的需求:  当前时间是多少、下个月的今天是星期几、统计截止到当前日期前 3 天的收入总和…… 上述需求就需要使用日期时间函数来实现: MySQL服务器中的三种时区设置:  ...

    日期和时间函数

    可能的需求:

      当前时间是多少、下个月的今天是星期几、统计截止到当前日期前 3 天的收入总和……

    上述需求就需要使用日期和时间函数来实现:

    MySQL服务器中的三种时区设置:

      ①系统时区---保存在系统变量system_time_zone

      ②服务器时区---保存在全局系统变量global.time_zone

      ③每个客户端连接的时区---保存在会话变量session.time_zone

    注意:

      客户端时区的设置会影响一些日期函数返回值的显示,例如:now()、curtime()、curdate(),也影响timestamp列值的显示

      默认情况下,客户端和服务器的时区相同,其值为SYSTEM,表示使用系统时区。 

    复制代码
    mysql> select @@global.time_zone,@@session.time_zone;
    +--------------------+---------------------+
    | @@global.time_zone | @@session.time_zone |
    +--------------------+---------------------+
    | SYSTEM             | SYSTEM              |
    +--------------------+---------------------+
    1 row in set (0.00 sec)
    
    mysql> show variables like 'system_time_zone';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | system_time_zone | CST   |
    +------------------+-------+
    1 row in set (0.28 sec)
    复制代码

     

     

    1、NOW([fsp]):返回服务器的当前日期和时间(fsp指定小数秒的精度,取值0--6)

    格式:

      ‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’

    复制代码
    now()的显示格式是‘YYYY-MM-DD HH:MM:SS’
    now()+0的显示格式是‘YYYYMMDDHHMMSS’

    mysql> select now();
    +---------------------+
    | now()               |
    +---------------------+
    | 2017-03-24 13:53:34 |
    +---------------------+
    
    mysql> select now()+0;
    +----------------+
    | now()+0        |
    +----------------+
    | 20170324135428 |
    +----------------+

     mysql> select now(6);  //指定小数秒的精度
     +----------------------------+
     | now(6) |
     +----------------------------+
     | 2017-04-19 19:55:46.658198 |
     +----------------------------+

    复制代码

    now()函数的同义词有:CURRENT_TIMESTAMP 、 CURRENT_TIMESTAMP()、LOCALTIMESTAMP 、 LOCALTIMESTAMP()、LOCALTIME 、 LOCALTIME()

    注意:

      SYSDATE( ):返回服务器的当前日期和时间

    与now的不同点:(一般使用NOW而不用SYSDATE)

      ①SYSDATE()返回的是函数执行时的时间

      ②now()返回的是语句执行时的时间

    复制代码
    mysql> select now(),sleep(2),now();
    +---------------------+----------+---------------------+
    | now()               | sleep(2) | now()               |
    +---------------------+----------+---------------------+
    | 2017-04-19 20:01:39 |        0 | 2017-04-19 20:01:39 |
    +---------------------+----------+---------------------+
    1 row in set (2.00 sec)
    
    mysql> select sysdate(),sleep(2),sysdate();
    +---------------------+----------+---------------------+
    | sysdate()           | sleep(2) | sysdate()           |
    +---------------------+----------+---------------------+
    | 2017-04-19 20:02:01 |        0 | 2017-04-19 20:02:03 |
    +---------------------+----------+---------------------+
    1 row in set (2.05 sec)
    复制代码

     

     

    2、CURTIME([fsp]):返回当前时间,只包含时分秒(fsp指定小数秒的精度,取值0--6)

    格式:

      ‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’

    复制代码
    mysql> select curtime(),curtime(2);
    +-----------+-------------+
    | curtime() | curtime(2)  |
    +-----------+-------------+
    | 14:35:23  | 14:35:23.90 |
    +-----------+-------------+
    复制代码

    同义词有:CURRENT_TIME 、 CURRENT_TIME() 

     

     

    3、CURDATE():返回当前日期,只包含年月日

    格式:

      ‘YYYY-MM-DD’或者‘YYYYMMDD’

    复制代码
    mysql> select curdate(),curdate()+2;
    +------------+-------------+
    | curdate()  | curdate()+2 |
    +------------+-------------+
    | 2017-03-24 |    20170326 |
    +------------+-------------+
    
    mysql> select curdate(),curdate()+0;
    +------------+-------------+
    | curdate()  | curdate()+0 |
    +------------+-------------+
    | 2017-03-24 |    20170324 |
    +------------+-------------+
    复制代码

    同义词有: CURRENT_DATE 、CURRENT_DATE()

     

     

    4、TIMEDIFF(expr1, expr2):返回两个日期相减(expr1 − expr2 )相差的时间数(两个参数类型必须相同

    复制代码
    mysql> select timediff('18:32:59','60000');
    +------------------------------+
    | timediff('18:32:59','60000') |
    +------------------------------+
    | 12:32:59                     |
    +------------------------------+
    
    
    mysql> select timediff('18:32:59','2017-1-1 60000');
    +---------------------------------------+
    | timediff('18:32:59','2017-1-1 60000') |
    +---------------------------------------+
    | NULL                                  |
    +---------------------------------------+
    复制代码

     

    DATEDIFF(expr1, expr2):返回两个日期相减(expr1 − expr2 )相差的天数

    复制代码
    mysql> select datediff('2017-3-24 18:32:59','2016-9-1');
    +-------------------------------------------+
    | datediff('2017-3-24 18:32:59','2016-9-1') |
    +-------------------------------------------+
    |                                       204 |
    +-------------------------------------------+
    复制代码

     

     

    5、日期时间运算函数:分别为给定的日期date加上(add)或减去(sub)一个时间间隔值expr

    格式:

      DATE_ADD(date, INTERVAL  expr  unit);

      DATE_SUB(date, INTERVAL  expr  unit);

    interval是间隔类型关键字

    expr是一个表达式,对应后面的类型

    unit是时间间隔的单位(间隔类型)(20个),如下:

    HOUR

    小时

    MINUTE

    SECOND

    MICROSECOND

    毫秒

    YEAR

    MONTH

    DAY

    WEEK

    QUARTER

    YEAR_MONTH

    年和月

    DAY_HOUR

    日和小时

    DAY_MINUTE

    日和分钟

    DAY_ SECOND

    日和秒

    HOUR_MINUTE

    小时和分

    HOUR_SECOND

    小时和秒

    MINUTE_SECOND

    分钟和秒

    复制代码
    mysql> select now(),date_add(now(),interval 1 day);  #加一天
    +---------------------+--------------------------------+
    | now()               | date_add(now(),interval 1 day) |
    +---------------------+--------------------------------+
    | 2017-03-24 14:53:08 | 2017-03-25 14:53:08            |
    +---------------------+--------------------------------+
    
    mysql> SELECT date_sub('2005-01-01 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND);  #减1天1小时1分1秒
    +---------------------------------------------------------------+
    | date_sub('2005-01-01 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND) |
    +---------------------------------------------------------------+
    | 2004-12-30 22:58:59                                           |
    +---------------------------------------------------------------+
    复制代码

     

    不使用函数,也可以写表达式进行日期的加减:

      date  + INTERVAL  expr  unit

      date  - INTERVAL  expr  unit

    复制代码
    mysql> SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;
    +-------------------------------------------+
    | '2008-12-31 23:59:59' + INTERVAL 1 SECOND |
    +-------------------------------------------+
    | 2009-01-01 00:00:00                       |
    +-------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT '2005-01-01' - INTERVAL 1 SECOND;
    +----------------------------------+
    | '2005-01-01' - INTERVAL 1 SECOND |
    +----------------------------------+
    | 2004-12-31 23:59:59              |
    +----------------------------------+
    1 row in set (0.00 sec)
    复制代码

     

     

    6、选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒(常用

    SELECT now(),date(now()); -- 日期

    SELECT now(),time(now()); -- 时间

    SELECT now(),year(now()); -- 年

    SELECT now(),quarter(now()); -- 季度

    SELECT now(),month(now()); -- 月

    SELECT now(),week(now()); -- 周

    SELECT now(),day(now()); -- 日

    SELECT now(),hour(now()); -- 小时

    SELECT now(),minute(now()); -- 分钟

    SELECT now(),second(now()); -- 秒

    SELECT now(),microsecond(now()); -- 微秒

     

    EXTRACT(unit  FROM  date):从日期中抽取出某个单独的部分或组合

    SELECT now(),extract(YEAR FROM now()); -- 年

    SELECT now(),extract(QUARTER FROM now()); -- 季度

    SELECT now(),extract(MONTH FROM now()); -- 月

    SELECT now(),extract(WEEK FROM now()); -- 周

    SELECT now(),extract(DAY FROM now()); -- 日

    SELECT now(),extract(HOUR FROM now()); -- 小时

    SELECT now(),extract(MINUTE FROM now()); -- 分钟

    SELECT now(),extract(SECOND FROM now()); -- 秒

    SELECT now(),extract(YEAR_MONTH FROM now()); -- 年月

    SELECT now(),extract(HOUR_MINUTE FROM now()); -- 时分

      

     

    7、个性化显示时间日期

      dayofweek(date)

      dayofmonth(date)

      dayofyear(date)

    ##分别返回日期在一周、一月、一年中是第几天

    复制代码
    mysql> SELECT now(),dayofweek(now());
    +---------------------+------------------+
    | now()               | dayofweek(now()) |
    +---------------------+------------------+
    | 2017-04-19 20:25:41 |                4 |
    +---------------------+------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT now(),dayofmonth(now());
    +---------------------+-------------------+
    | now()               | dayofmonth(now()) |
    +---------------------+-------------------+
    | 2017-04-19 20:25:51 |                19 |
    +---------------------+-------------------+
    1 row in set (0.03 sec)
    
    mysql> select now(),dayofyear(now());
    +---------------------+------------------+
    | now()               | dayofyear(now()) |
    +---------------------+------------------+
    | 2017-04-19 20:26:00 |              109 |
    +---------------------+------------------+
    1 row in set (0.00 sec)
    复制代码

      

      dayname()

      monthname()

    ##分别返回日期的星期和月份名称

    名称是中文or英文的由系统变量lc_time_names控制(默认值是'en_US')

    复制代码
    mysql> show variables like 'lc_time_names';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | lc_time_names | en_US |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    mysql> select dayname(now()),monthname(now());
    +----------------+------------------+
    | dayname(now()) | monthname(now()) |
    +----------------+------------------+
    | Wednesday      | April            |
    +----------------+------------------+
    1 row in set (0.00 sec)
    
    mysql> set lc_time_names='zh_CN';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select dayname(now()),monthname(now());
    +----------------+------------------+
    | dayname(now()) | monthname(now()) |
    +----------------+------------------+
    | 星期三         | 四月             |
    +----------------+------------------+
    1 row in set (0.00 sec)
    展开全文
  • MYSQL简单的时间函数 SQL语句 含义及输出 select now(); 获取当前时间 ,例2020-03-25 12:24:56 select CURDATE(); 获取当前日期,返回当前时间的年月日 例2020-03-25 select CURRENT_DATE(); 获取当前日期...
  • 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +———————+ | now()...,localtime ,localtimestamp — (v4.0.6) ,localtimestamp() — (v4.0.6) 这些日期时间函数,都等同于 now()。鉴于
  • 本文是脚本之家小编给大家收集的比较全的Mysql日期和mysql时间函数,感兴趣的朋友跟随一起看看吧
  • mysql时间日期内置函数–非常方便用于查询今天、昨天、上周,本月,上月,年度查询等,但是千万要监控mysql语句的性能,适当加索引优化一下查询速度哦 今天 select * from 表名 where to_days(时间字段名) = to_days...
  • Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数日期转换格式化函数 1、DAYOFWEEK(date) SELECT DAYOFWEEK(‘2016-01-16') SELECT DAYOFWEEK(‘2016-01-16 00:00:00') -> ...
  • 本文主要是总结一些常用的在实际运用中常用的一些mysql时间日期以及转换的函数 1.now() :返回当前日期时间 select now(); //2018-04-21 09:19:21 2.curdate() :返回当前日期 select curdate(); //2018-04-...
  • mYsql日期时间函数不求人
  • NULL 博文链接:https://xbcxs.iteye.com/blog/808190
  • Mysql-日期时间函数

    2020-12-15 01:10:11
    Mysql中常用的日期时间函数: 函数 功能 CURDATE() 返回当前日期 CURTIME() 返回当前时间 NOW() 返回当前的日期和时间 DATEDIFF(expr,expr2) 返回起始时间和结束时间之间的天数 DATE_FORMAT...
  • MySQL日期时间函数大全 DAYOFWEEK(date)   返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03');   -> 3  WEEKDAY(date)   返回日期date是星期几(0=星期...

    DAYOFWEEK(date) 
     返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
    mysql> select DAYOFWEEK('1998-02-03'); 
      -> 3 
    WEEKDAY(date) 
     返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 
    mysql> select WEEKDAY('1997-10-04 22:23:00'); 
      -> 5 
    mysql> select WEEKDAY('1997-11-05'); 
      -> 2 
    DAYOFMONTH(date) 
     返回date是一月中的第几日(在1到31范围内) 
    mysql> select DAYOFMONTH('1998-02-03'); 
      -> 3 
    DAYOFYEAR(date) 
     返回date是一年中的第几日(在1到366范围内) 
    mysql> select DAYOFYEAR('1998-02-03'); 
      -> 34 
    MONTH(date) 
     返回date中的月份数值 
    mysql> select MONTH('1998-02-03'); 
      -> 2 
    DAYNAME(date) 
     返回date是星期几(按英文名返回)
    mysql> select DAYNAME("1998-02-05"); 
      -> 'Thursday' 
    MONTHNAME(date) 
     返回date是几月(按英文名返回)
    mysql> select MONTHNAME("1998-02-05"); 
      -> 'February' 
    QUARTER(date) 
     返回date是一年的第几个季度 
    mysql> select QUARTER('98-04-01'); 
      -> 2 
    WEEK(date,first)
     返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)
    mysql> select WEEK('1998-02-20'); 
      -> 7 
    mysql> select WEEK('1998-02-20',0); 
      -> 7 
    mysql> select WEEK('1998-02-20',1); 
      -> 8 
    YEAR(date) 
     返回date的年份(范围在1000到9999) 
    mysql> select YEAR('98-02-03'); 
      -> 1998 
    HOUR(time) 
     返回time的小时数(范围是0到23)
    mysql> select HOUR('10:05:03'); 
      -> 10 
    MINUTE(time) 
     返回time的分钟数(范围是0到59) 
    mysql> select MINUTE('98-02-03 10:05:03'); 
      -> 5 
    SECOND(time) 
     返回time的秒数(范围是0到59)
    mysql> select SECOND('10:05:03'); 
      -> 3 
    PERIOD_ADD(P,N) 
     增加N个月到时期P并返回(P的格式YYMM或YYYYMM) 
    mysql> select PERIOD_ADD(9801,2); 
      -> 199803 
    PERIOD_DIFF(P1,P2) 
     返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM)
    mysql> select PERIOD_DIFF(9802,199703); 
      -> 11 
    DATE_ADD(date,INTERVAL expr type)
    DATE_SUB(date,INTERVAL expr type) 
    ADDDATE(date,INTERVAL expr type) 
    SUBDATE(date,INTERVAL expr type)
     对日期时间进行加减法运算
     (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数
     date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释
     [type值 含义 期望的expr格式]:
     SECOND 秒 SECONDS 
     MINUTE 分钟 MINUTES 
     HOUR 时间 HOURS 
     DAY 天 DAYS 
     MONTH 月 MONTHS 
     YEAR 年 YEARS 
     MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS" 
     HOUR_MINUTE 小时和分钟 "HOURS:MINUTES" 
     DAY_HOUR 天和小时 "DAYS HOURS" 
     YEAR_MONTH 年和月 "YEARS-MONTHS" 
     HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS" 
     DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES" 
     DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
     expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)
     如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
     如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数) 
    mysql> SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND; 
      -> 1998-01-01 00:00:00 
    mysql> SELECT INTERVAL 1 DAY "1997-12-31"; 
      -> 1998-01-01 
    mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; 
      -> 1997-12-31 23:59:59 
    mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND); 
      -> 1998-01-01 00:00:00 
    mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY); 
      -> 1998-01-01 23:59:59 
    mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND); 
      -> 1998-01-01 00:01:00 
    mysql> SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND); 
      -> 1997-12-30 22:58:59 
    mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
      -> 1997-12-30 14:00:00 
    mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); 
      -> 1997-12-02 
    mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"); 
      -> 1999 
    mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); 
      -> 199907 
    mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); 
      -> 20102 
    TO_DAYS(date) 
     返回日期date是西元0年至今多少天(不计算1582年以前)
    mysql> select TO_DAYS(950501); 
      -> 728779 
    mysql> select TO_DAYS('1997-10-07'); 
      -> 729669 
    FROM_DAYS(N) 
     给出西元0年至今多少天返回DATE值(不计算1582年以前)
    mysql> select FROM_DAYS(729669); 
      -> '1997-10-07' 
    DATE_FORMAT(date,format) 
     根据format字符串格式化date值
     (在format字符串中可用标志符:
     %M 月名字(January……December) 
     %W 星期名字(Sunday……Saturday) 
     %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) 
     %Y 年, 数字, 4 位 
     %y 年, 数字, 2 位 
     %a 缩写的星期名字(Sun……Sat) 
     %d 月份中的天数, 数字(00……31) 
     %e 月份中的天数, 数字(0……31) 
     %m 月, 数字(01……12) 
     %c 月, 数字(1……12) 
     %b 缩写的月份名字(Jan……Dec) 
     %j 一年中的天数(001……366) 
     %H 小时(00……23) 
     %k 小时(0……23) 
     %h 小时(01……12) 
     %I 小时(01……12) 
     %l 小时(1……12) 
     %i 分钟, 数字(00……59) 
     %r 时间,12 小时(hh:mm:ss [AP]M) 
     %T 时间,24 小时(hh:mm:ss) 
     %S 秒(00……59) 
     %s 秒(00……59) 
     %p AM或PM 
     %w 一个星期中的天数(0=Sunday ……6=Saturday ) 
     %U 星期(0……52), 这里星期天是星期的第一天 
     %u 星期(0……52), 这里星期一是星期的第一天 
     %% 字符% )
    mysql> select DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y'); 
      -> 'Saturday October 1997' 
    mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H:%i:%s'); 
      -> '22:23:00' 
    mysql> select DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j'); 
      -> '4th 97 Sat 04 10 Oct 277' 
    mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w'); 
      -> '22 22 10 10:23:00 PM 22:23:00 00 6' 
    TIME_FORMAT(time,format)
     和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)
    CURDATE() 
    CURRENT_DATE()
     以'YYYY-MM-DD'或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字) 
    mysql> select CURDATE(); 
      -> '1997-12-15' 
    mysql> select CURDATE() 0; 
      -> 19971215 
    CURTIME() 
    CURRENT_TIME()
     以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字) 
    mysql> select CURTIME(); 
      -> '23:50:26' 
    mysql> select CURTIME() 0; 
      -> 235026 
    NOW() 
    SYSDATE() 
    CURRENT_TIMESTAMP()
     以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字) 
    mysql> select NOW(); 
      -> '1997-12-15 23:50:26' 
    mysql> select NOW() 0; 
      -> 19971215235026 
    UNIX_TIMESTAMP() 
    UNIX_TIMESTAMP(date) 
     返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)
    mysql> select UNIX_TIMESTAMP(); 
      -> 882226357 
    mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); 
      -> 875996580 
    FROM_UNIXTIME(unix_timestamp) 
     以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字) 
    mysql> select FROM_UNIXTIME(875996580); 
      -> '1997-10-04 22:23:00' 
    mysql> select FROM_UNIXTIME(875996580) 0; 
      -> 19971004222300 
    FROM_UNIXTIME(unix_timestamp,format) 
     以format字符串格式返回时间戳的值
    mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x'); 
      -> '1997 23rd December 03:43:30 x' 
    SEC_TO_TIME(seconds) 
     以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字) 
    mysql> select SEC_TO_TIME(2378); 
      -> '00:39:38' 
    mysql> select SEC_TO_TIME(2378) 0; 
      -> 3938 
    TIME_TO_SEC(time) 
     返回time值有多少秒 
    mysql> select TIME_TO_SEC('22:23:00'); 
      -> 80580 
    mysql> select TIME_TO_SEC('00:39:38'); 
      -> 2378
    统计函数记录——按月、按季度、按日、时间段统计
    按年汇总,统计:
    select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, '%Y');
    按月汇总,统计: 
    select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, '%Y-%m');
    按季度汇总,统计: 
    select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, '%Y'),FLOOR((date_format(col, '%m')+2)/3)); 
    select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, '%Y'),FLOOR((date_format(col, '%m')+2)/3));
    按小时: 
    select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by date_format(col, '%Y-%m-%d %H ');
    查询 本年度的数据:
    SELECT * FROM mytable WHERE year(FROM_UNIXTIME(my_time)) = year(curdate())
    查询数据附带季度数:
    SELECT id, quarter(FROM_UNIXTIME(my_time)) FROM mytable;
    查询 本季度的数据:
    SELECT * FROM mytable WHERE quarter(FROM_UNIXTIME(my_time)) = quarter(curdate());
    本月统计:
    select * from mytable where month(my_time1) = month(curdate()) and year(my_time2) = year(curdate())
    本周统计:
    select * from mytable where month(my_time1) = month(curdate()) and week(my_time2) = week(curdate())
    N天内记录:
    WHERE TO_DAYS(NOW())-TO_DAYS(时间字段)<=N


    例子:

    1. -- 全站时段统计  
    2.   
    3. SELECT tch.hourlist as hourStr,  
    4.   IFNULL(tv.numStr,0) as viewCount,  
    5.   IFNULL(ts.numStr,0) as shareCount,  
    6.   IFNULL(tl.numStr,0) as likesCount,  
    7.   IFNULL(tc.numStr,0) as collectCount   
    8.  FROM  
    9. (SELECT hourlist from t_calendar_hour) as tch   
    10.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_view_record where 1=1 and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as tv   
    11.  ON tv.hourStr = tch.hourlist   
    12.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_share_record where 1=1 and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as ts   
    13.   ON ts.hourStr = tch.hourlist   
    14.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_likes_record where 1=1 and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as tl   
    15.   ON tl.hourStr = tch.hourlist   
    16.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_collection_record where 1=1 and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as tc   
    17.   ON tc.hourStr = tch.hourlist   
    18.  WHERE 1=1 ORDER BY tch.hourlist ASC;  
    19.   
    20.   
    21.   
    22. 创建存储过程  
    23. DELIMITER;//  
    24. create procedure myproc()  
    25. begin   
    26. declare num int;   
    27. set num=1;   
    28. while num <= 24 do   
    29. insert into t_calendar_hour(hourlist) values(num);  
    30. set num=num+1;  
    31. end while;  
    32. commit;   
    33. end;//  
    34.   
    35. 调用存储过程  
    36. CALL myproc();  
    37.   
    38. -- 文章按时段统计  
    39.   
    40. SELECT tch.hourlist as hourStr,  
    41.   IFNULL(tv.numStr,0) as viewCount,  
    42.   IFNULL(ts.numStr,0) as shareCount,  
    43.   IFNULL(tl.numStr,0) as likesCount,  
    44.   IFNULL(tc.numStr,0) as collectCount   
    45.  FROM  
    46. (SELECT hourlist from t_calendar_hour) as tch   
    47.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_view_record where 1=1 and ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as tv   
    48.  ON tv.hourStr = tch.hourlist   
    49.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_share_record where 1=1 and ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as ts   
    50.   ON ts.hourStr = tch.hourlist   
    51.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_likes_record where 1=1 and ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as tl   
    52.   ON tl.hourStr = tch.hourlist   
    53.  LEFT JOIN (select  DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_collection_record where 1=1 and ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H')) as tc   
    54.   ON tc.hourStr = tch.hourlist   
    55.  WHERE 1=1 ORDER BY tch.hourlist ASC;  
    56.   
    57.   
    58. SELECT hourlist from t_calendar_hour;  
    59.   
    60. select DATE_FORMAT(CREATE_TIME,'%Y-%m-%d'as dateStr, DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_view_record where ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H');  
    61.   
    62. select DATE_FORMAT(CREATE_TIME,'%Y-%m-%d'as dateStr, DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_share_record where ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H');  
    63.   
    64. select DATE_FORMAT(CREATE_TIME,'%Y-%m-%d'as dateStr, DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_likes_record where ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H');  
    65.   
    66. select DATE_FORMAT(CREATE_TIME,'%Y-%m-%d'as dateStr, DATE_FORMAT(CREATE_TIME,'%H'as hourStr, count(ID) as numStr from t_article_collection_record where ARTICLE_ID="e548fdc0556bb01a01556bc6723b0005" and CREATE_TIME>='2016-06-20 00:00:00' and CREATE_TIME<='2016-06-20 23:59:59' GROUP BY DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H');  
    67.   
    68.   
    69.   
    70.   
    71. 文章数据全站统计  
    72.     SPECIAL_ID="4028813d54851a470154855335040012" -- 频道  
    73.     CREATOR="e548fdc054f170770154f17f55dc0008"  -- 编辑  
    74.     AUTHOR="4028813d54084b6a015408a303f1003a"  -- 作者  
    75.  and TITLE LIKE "%陷贿选门%"  
    76.   
    77.   
    78. SELECT t.ID as articleId, t.title as title,t.SPECIAL_ID as specialId,t.CREATOR as createId,t.author as authorId,t.FACT_TIME as factTime,  
    79.   IFNULL(tv.numStr,0) as viewCount,  
    80.   IFNULL(ts.numStr,0) as shareCount,  
    81.   IFNULL(tl.numStr,0) as likesCount,  
    82.   IFNULL(tc.numStr,0) as collectCount  
    83.  FROM  
    84.     (select ID,TITLE,SPECIAL_ID,CREATOR,AUTHOR,FACT_TIME from t_article WHERE  1=1 and SPECIAL_ID='e548fdc054f188670154f1b6366c000b' ORDER BY FACT_TIME DESC LIMIT 0,1000) as t   
    85.    LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_view_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID having numStr>=45 and numStr<=87) as tv   
    86.         on t.ID = tv.ARTICLE_ID   
    87.    LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_share_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID) as ts   
    88.         on t.ID = ts.ARTICLE_ID  
    89.    LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_likes_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID) as tl   
    90.         on t.ID = tl.ARTICLE_ID  
    91.    LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_collection_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID) as tc   
    92.         on t.ID = tc.ARTICLE_ID   
    93.    where 1=1 ;  
    94.   
    95.   
    96.     SELECT t.ID as articleId, t.title as title,t.SPECIAL_ID as specialId,t.CREATOR as createId,t.author as authorId,t.FACT_TIME as factTime,IFNULL(tv.numStr,0) as viewCount,IFNULL(ts.numStr,0) as shareCount,IFNULL(tl.numStr,0) as likesCount,IFNULL(tc.numStr,0) as collectCount FROM  (select ID,TITLE,SPECIAL_ID,CREATOR,AUTHOR,FACT_TIME from t_article WHERE 1=1  ORDER BY FACT_TIME DESC ) as t  LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_view_record where 1=1  and CREATE_TIME>='2016-06-28' and CREATE_TIME<='2016-10-12'  GROUP BY ARTICLE_ID) as tv on t.ID = tv.ARTICLE_ID  LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_share_record where 1=1  and CREATE_TIME>='2016-06-28' and CREATE_TIME<='2016-10-12' GROUP BY ARTICLE_ID) as ts on t.ID = ts.ARTICLE_ID  LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_likes_record where 1=1  and CREATE_TIME>='2016-06-28' and CREATE_TIME<='2016-10-12' GROUP BY ARTICLE_ID) as tl on t.ID = tl.ARTICLE_ID  LEFT JOIN (SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_collection_record where 1=1  and CREATE_TIME>='2016-06-28' and CREATE_TIME<='2016-10-12'  GROUP BY ARTICLE_ID) as tc on t.ID = tc.ARTICLE_ID where 1=1  ORDER BY viewCount DESC  LIMIT 0,20;  
    97.   
    98.   
    99.   
    100.   
    101.   
    102. SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_view_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID having numStr>=45 and numStr<=87;  
    103.   
    104. SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_share_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID having numStr>=45;  
    105.   
    106. SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_likes_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID having numStr>=45;  
    107.   
    108. SELECT ARTICLE_ID,CREATE_TIME, count(ID) as numStr from t_article_collection_record where CREATE_TIME>='2016-9-16' and CREATE_TIME<='2016-10-16' GROUP BY ARTICLE_ID having numStr>=45;  
    109.   
    110.     
    111.   
    112.   
    113.   
    114.   
    115.   
    116.   
    117.   
    118.   
    119.   
    120.   
    121.   
    122.