mysql 统计按天、星期、按月数据的各种 sql 语句 (转录)
文章主要是作为知识整理,内容略有修改,方便以后查阅,内容转摘至 陈宇衡的个人博客,欢迎前去围观。
作为演示效果,先创建一个测试表,在插入两条数据(注:时间为 datetime
类型,unix 时间戳需要转换)
1. 创建表:
create table if not exists t
(
id int,
addTime datetime default '0000-00-00 00:00:00'
)
2. 添加两条初始数据:
insert t values(1, '2017-03-12 02:00:00');
insert t values(2, '2017-03-22 02:00:00');
当天或当日插入的数据:
- 传统对比判断:
SELECT count(*) FROM t WHERE DATE_FORMAT(addTime, '%Y-%m-%d') = date_format(now(),'%Y-%m-%d'));
- 第一点的简写:
SELECT * FROM t WHERE addTime >= date_format(NOW(), '%Y-%m-%d');
- 利用函数判断:
SELECT * FROM t WHERE DATEDIFF(addTime, NOW()) =0;
(推荐此方法)
注:返回当天时间的mysql函数有
CURDATE()
、CURRENT_DATE()
、CURRENT_DATE
返回格式 0000-00-00
(年-月-日),
NOW()
返回格式 0000-00-00 00:00:00
(年-月-日 时:分:秒) 几种;
当周的相关数据写法:
- 获取今天是一周第几天或星期几:
SELECT WEEKDAY(now());
(返回的是数字:0为周一,6为周日) - 获取本周的第一天日期:
SELECT DATE_SUB(now(), INTERVAL WEEKDAY(now()) day);
(或SELECT DATE_ADD(now(),INTERVAL -WEEKDAY(now()) day);
或SELECT CURDATE() – WEEKDAY(CURDATE());
) - 再写一个上周的第一天至现在的数据:(以表t为数据表)
SELECT * FROM t WHERE addTime >= date_format(date_sub(date_sub(now(), INTERVAL WEEKDAY(NOW()) DAY), INTERVAL 1 WEEK), ‘%Y-%m-%d’);
是不是有些感觉了!
注:若你是以时间戳
保存的时间字段,那么请用from_unixtime()
函数转换为时间格式,如:from_unixtime($timestamp)
INTERVAL
的用户说明:
1、当函数使用时,即INTERVAL()
,为比较函数,如:INTERVAL(10,1,3,5,7);
结果为4;
原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。
2、当关键词使用时,表示为设置时间间隔,常用在date_add()
与date_sub()
函数里,如:INTERVAL 1 DAY
,解释为将时间间隔设置为1天。
弄清楚了上面几个重要的日期运算函数,下面再来一个混合的日期运算。
3、上个月的第一天时间:SELECT DATE_SUB(DATE_SUB(NOW(), INTERVAL DAYOFMONTH(NOW()) -1 DAY), INTERVAL 1 MONTH);
是不是一目了然了!
当月的相关数据写法:
- 今天是当月的第几天:
SELECT DAYOFMONTH(NOW());
- 获取当月的第一天时间:
SELECT DATE_SUB(NOW(), INTERVAL DAYOFMONTH(NOW()) –1 DAY);
日期运算函数,句型:date_add(date,INTERVAL expr type)
和date_sub(date,INTERVAL expr type)
,date为一个datetime或date值,可当作起始时间,expr为一个表达式,用来指定增加或减少的时间间隔数目,可为一个字符串–若为负值,则在表达式前加个"-"符号。type为关键词,它表示了表达式被解释的方式,通常用年(year)
、月(month)
、日(day)
、周(week)
等。
Mysql中将日期转为时间戳
前三点的方法,讲的都是将日期转为相应时间常量,并没有提到时间戳与时间的转换,这里把它写出来,
1、时间戳转日期,方法是select from_unixtime(1336542121);
2、日期转时间戳,方法是:select unix_timestamp('2013-04-08');
例如 按天统计新增记录:select count(*) as count, from_unixtime(addTime, '%Y-%m-%d') as datetime from t;
结合前面例子,对时间戳进行相应的转换就可以了。
mysql 统计按天、星期、按月数据的各种 sql 语句 (转录)的更多相关文章
- mysql统计天、周、月、季度、半年、年
之前在网上搜索按时间统计,发现不是很全 ,接着别人的思路进行延伸下, mysql统计天.周.月.季度.半年.年 前期工作创建辅助表 CREATE TABLE num (i INT); ),(),(), ...
- 1.4 数据库和常用SQL语句(正文)——MySQL数据库命令和SQL语句
前面我们已经讲述了,登录时,我们使用mysql –u root –p命令进行,此时如果设置了密码,则需要输入密码. 输入密码后即进入MySQL的操作界面,此时,命令行窗体左侧显示"mysql ...
- 点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)
下载原版阿里JAVA开发手册 [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...
- 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库
将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...
- 使用excel中的数据快速生成sql语句
在小公司的话,总是会有要开发去导入历史数据(数据从旧系统迁移到新系统上)的时候.这个时候,现场实施或客户会给你一份EXCEL文档,里面包含了一些别的系统上的历史数据,然后就让你导入到现在的系统上面去. ...
- mysql中获取一天、一周、一月时间数据的各种sql语句写法
今天抽时间整理了一篇mysql中与天.周.月有关的时间数据的sql语句的各种写法,部分是收集资料,全部手工整理,自己学习的同时,分享给大家,并首先默认创建一个表.插入2条数据,便于部分数据的测试,其中 ...
- MySQL之唯一索引、外键的变种、SQL语句数据行操作补充
0.唯一索引 unique对num进行唯一限制,表示num是独一无二的,uql是唯一索引名称 上面为联合索引:num和xx不能完全一样 1.外键的变种 a. 用户表和部门表 用户: 1 alex 1 ...
- mysql中删除完全重复数据的准确SQL语句
删除数据库中重复的记录,只保留一条 DELETE FROM tb_gps_records WHERE id NOT IN (SELECT bid FROM (SELECT min(id) as bid ...
- mysql数据库技术1——基本的增删查改的sql语句
1.数据库语言的分类 DDL:数据库定义语言 data Definition language 用于创建.修改.和删除数据库内的数据结构,如: 1:创建和删除数据库(CREATE DATABASE | ...
随机推荐
- 洛谷 P1308 统计单词数【字符串处理】
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
- ARC 73 E - Ball Coloring
E - Ball Coloring Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Ther ...
- springboot优雅的关闭应用
使用actuator,通过发送http请求关闭 将应用注册为linux服务,通过service xxx stop关闭 具体这两种方式如何实现,这里就不说了,网上百度一堆,主要讲一下在这两种情况下web ...
- [bzoj1468][poj1741]Tree[点分治]
可以说是点分治第一题,之前那道的点分治只是模模糊糊,做完这道题感觉清楚了很多,点分治可以理解为每次树的重心(这样会把数分为若干棵子树,子树大小为log级别),然后统计包含重心的整个子树的值减去各个子树 ...
- Square words(codevs 3301)
题目描述 Description 定义square words为: 1.长度为偶数. 2.前一半等于后一半. 比如abcabc和aaaa都是square words,但是abcabcab和aaaaa都 ...
- Intellij Idea 13:运行Clojure的repl环境
准备工作:1. 安装cursive插件. a) 官网地址:https://cursiveclojure.com/userguide b) 插件的Reposi ...
- HDU 2767-Proving Equivalences(强联通+缩点)
题目地址:pid=2767">HDU 2767 题意:给一张有向图.求最少加几条边使这个图强连通. 思路:先求这张图的强连通分量.假设为1.则输出0(证明该图不须要加边已经是强连通的了 ...
- 查看编译器的默认include 路径
echo | gcc -v -x c++ -E - echo | g++ -v -x c++ -E - `gcc -print-prog-name=cc1plus` -v `g++ -print-pr ...
- 深入分析JavaWeb Item38 -- 监听器(Listener)高速学习
一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和对应处理的对象,当被监视的对象发生情况时,马上採取对应的行动.监听器事实上就是一个实现特定接口的普 ...
- couchbase的备份与恢复命令
下面技术应用于最优质的水果的鲜果篮 ./cbbackup http://192.168.1.112:8091 /backups/20140505 -u Administrator -p passwor ...