MySql 按时间段查询数据方法

合集下载

mysql数据库时间查询

mysql数据库时间查询

mysql数据库时间查询1、查询当前时间年⽉⽇时分秒mysql> select now();+---------------------+| now() |+---------------------+| 2018-03-19 23:12:52 |+---------------------+2、查询当前时间前三⼩时的时间点mysql> select subdate(now(),interval 3 hour);+--------------------------------+| subdate(now(),interval 3 hour) |+--------------------------------+| 2018-03-19 20:13:11 |+--------------------------------+3、查询当前时间前三天的时间点mysql> select subdate(now(),interval 3 day);+-------------------------------+| subdate(now(),interval 3 day) |+-------------------------------+| 2018-03-16 23:13:23 |+-------------------------------+4、查新当前时间前三分钟的时间点mysql> select subdate(now(),interval 3 minute);+----------------------------------+| subdate(now(),interval 3 minute) |+----------------------------------+| 2018-03-19 23:10:32 |+----------------------------------+5、查询当前时间时分秒mysql> select current_time();+----------------+| current_time() |+----------------+| 23:14:09 |+----------------+6、查询当前时间年⽉⽇时分秒mysql> select current_date();+----------------+| current_date() |+----------------+| 2018-03-19 |+----------------+7、获取本⽉最后⼀天mysql> select last_day(curdate());+---------------------+| last_day(curdate()) |+---------------------+| 2018-03-31 |+---------------------+8、获取本⽉第⼀天mysql> select date_add(curdate(), interval - day(curdate()) + 1 day);+--------------------------------------------------------+| date_add(curdate(), interval - day(curdate()) + 1 day) |+--------------------------------------------------------+| 2018-03-01 |+--------------------------------------------------------+9、获取下个⽉第⼀天mysql> select date_add(curdate() - day(curdate()) + 1, interval 1 month);+------------------------------------------------------------+| date_add(curdate() - day(curdate()) + 1, interval 1 month) |+------------------------------------------------------------+| 2018-04-01 |+------------------------------------------------------------+10、获取本⽉天数mysql> select day(last_day(curdate()));+--------------------------+| day(last_day(curdate())) |+--------------------------+| 31 |+--------------------------+11-1、获取⼀个⽉前的今天【2018年的2⽉只有28天】mysql> select date_sub(curdate(), interval 1 month);+---------------------------------------+| date_sub(curdate(), interval 1 month) |+---------------------------------------+| 2018-02-28 |+---------------------------------------+11-1、获取两个⽉前的今天mysql> select date_sub(curdate(), interval 2 month);+---------------------------------------+| date_sub(curdate(), interval 2 month) |+---------------------------------------+| 2018-01-29 |+---------------------------------------+12、获取当前时间【当前⽉的第⼏天】mysql> select datediff(curdate(), date_sub(curdate(), interval 1 month));+------------------------------------------------------------+| datediff(curdate(), date_sub(curdate(), interval 1 month)) |+------------------------------------------------------------+| 29 |+------------------------------------------------------------+13、以时间为条件查询数据时(例如查询某个⽉内或者固定时间段内的数据)/*需要的依赖:<!-- https:///artifact/joda-time/joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.9.9</version></dependency>*///关于数据库查询数据以时间为条件的查询时/*思路:将将时间格式的字符串转换为DateTime类型的时间,然后可以实现在该时间基础上 plus增加day month week year等等;然后将增加固定时间后得到的DateTime类型的时间转换为字符串在sql语句中进⾏拼接*/StringBuffer timeStr = new StringBuffer("2017-01");timeStr.append("-01 00:00:01");org.joda.time.format.DateTimeFormatter format = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");//时间解析org.joda.time.DateTime startDate = DateTime.parse(timeStr.toString(), format);DateTime endDate = startDate.plusMonths(1);//在start表⽰的时间点基础上增加⼀个⽉String start = startDate.toString("yyyy-MM-dd HH:mm:ss");String end = endDate.toString("yyyy-MM-dd HH:mm:ss");System.out.println(start);System.out.println(end);// 单引号⼀定不能省略StringBuffer sql = new StringBuffer("select * from user where create_time >'");sql.append( start).append("'").append(" and create_time < '").append(end).append("'");String sqlQuery = sql.toString();//总之就是如下" create_time < '2017-01-01 00;00:00'" (这个是2017-01-01 00;00:00String类型的参数)。

mysql 查询一段时间内6点到22点的数据(也可按月份显示)

mysql 查询一段时间内6点到22点的数据(也可按月份显示)

1:查:2020年1月1日到2020年10月20日的6点到22点数据SELECTa.id FROM_UNIXTIME(a.order_time) a_timeFROM`ims_qing_renbao_order` aWHEREa.goods_id=16ANDa.order_type=3AND-- 时间段限制,一周或者任意时间段-- DATE_SUB(now()INTERVAL 7 DAY) <= FROM_UNIXTIME(a.clock)a.order_time BETWEEN UNIX_TIMESTAMP('2020-01-01 00:00:01') ANDUNIX_TIMESTAMP('2020-10-20 23:59:59')AND-- 每天时间段限制,格式化日期到时分秒(DATE_FORMAT(FROM_UNIXTIME(a.order_time) '%H:%i:%S') BETWEEN '06:00:00' AND'21:59:59')结果:2:查:2020年1月1日到2020年10月20日的22点到6点数据SELECTa.id FROM_UNIXTIME(a.order_time) a_timeFROM`ims_qing_renbao_order` aWHEREa.goods_id=16ANDa.order_type=3AND-- 时间段限制,一周或者任意时间段-- DATE_SUB(now()INTERVAL 7 DAY) <= FROM_UNIXTIME(a.clock)a.order_time BETWEEN UNIX_TIMESTAMP('2020-01-01 00:00:01') ANDUNIX_TIMESTAMP('2020-10-20 23:59:59')AND-- 每天时间段限制,格式化日期到时分秒(DATE_FORMAT(FROM_UNIXTIME(a.order_time) '%H:%i:%S') NOT BETWEEN '06:00:00' AND '21:59:59')结果:3:查:2020年1月1日到2020年10月20日的22点到6点数据按月份显示SELECTDATE_FORMAT(FROM_UNIXTIME(a.order_time) '%Y-%m') triggerMonthcount(id) triggerCountFROM`ims_qing_renbao_order` aWHEREa.goods_id = 16AND a.order_type = 3AND -- 时间段限制,一周或者任意时间段-- DATE_SUB(now()INTERVAL 7 DAY) <= FROM_UNIXTIME(a.clock)a.order_time BETWEEN UNIX_TIMESTAMP('2020-01-01 00:00:01')AND UNIX_TIMESTAMP('2020-10-20 23:59:59')AND -- 每天时间段限制,格式化日期到时分秒(DATE_FORMAT(FROM_UNIXTIME(a.order_time)'%H:%i:%S') BETWEEN '06:00:00'AND '21:59:59')GROUP BY triggerMonth结果:。

mysql常用时间列表的查询——七天内、本月、本周、某天

mysql常用时间列表的查询——七天内、本月、本周、某天

mysql常⽤时间列表的查询——七天内、本⽉、本周、某天最近七天的⽇期列表SELECT @s :=@s + 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`FROM mysql.help_topic,(SELECT @s := -1) tempWHERE @s < 6ORDER BY 'date'⼀天24⼩时查询(0 - 23)1. SELECT @d := @d + 1 `hour`2. FROM mysql.help_topic,(SELECT @d := -1) temp3. WHERE @d < 23ORDER BY `hour本周⽇期列表SELECT @a :=@a + 1 as `index`, DATE(ADDDATE(CURRENT_DATE, INTERVAL @a DAY)) AS `date`FROM mysql.help_topic,(SELECT @a := 0) tempWHERE @a < 6 - WEEKDAY(CURRENT_DATE)UNIONSELECT @s :=@s - 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`FROM mysql.help_topic,(SELECT @s := WEEKDAY(CURRENT_DATE) + 1) tempWHERE @s > 0ORDER BY `date`本⽉⽇期列表SELECT @a :=@a + 1 as `index`, DATE(ADDDATE(CURRENT_DATE, INTERVAL @a DAY)) AS `date`FROM mysql.help_topic,(SELECT @a := 0) tempWHERE @a < DAY(LAST_DAY(CURRENT_DATE)) - DAY(CURRENT_DATE)UNIONSELECT @s :=@s - 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`FROM mysql.help_topic,(SELECT @s := day(CURRENT_DATE)) tempWHERE @s > 0ORDER BY `date`有了上⾯⼏张临时表,解决时间段缺失的问题就简单了。

sqlservermysql按天、按小时、按分钟统计连续时间段数据【推荐】

sqlservermysql按天、按小时、按分钟统计连续时间段数据【推荐】

sqlservermysql按天、按⼩时、按分钟统计连续时间段数据【推荐】⼀,写在前⾯的话最近公司需要按天,按⼩时查看数据,可以直观的看到时间段的数据峰值。

接到需求,就开始疯狂百度搜索,但是搜索到的资料有很多都不清楚,需要⾃⼰去总结和挖掘其中的重要信息。

现在我把分享出来了呢,希望⼤家喜欢。

针对sqlserver, 有⼏点需要给⼤家说清楚(不懂的⾃⾏百度):•master..spt_values 是什么东西?能⽤来做什么?•如何产⽣连续的时间段(年,⽉,天,⼩时,分钟)⼆,master..spt_values是什么东西?能⽤来做什么呢?相对固定通⽤的取数字的表,主要作⽤就是取连续数字,不过有个缺陷就是只能取到2047。

可以执⾏下⾯语句就知道什么意思了。

select number from master..spt_values where type='p'三,如何产⽣连续的时间段(年,⽉,天,⼩时,分钟)在实际的运⽤中,⽬前主要是产⽣连续的时间段。

我准备了常⽤的操作,那下⾯的语句就分别展⽰出来。

-- 按年产⽣连续的SELECTsubstring(CONVERT(NVARCHAR(10), DateAdd(YEAR, number, '2016-01-01'),120),1,4) AS GroupDay,typeFROMmaster..spt_valuesWHERE type = 'p' AND number <= DateDiff(YEAR, '2016-01-01', '2019-01-01')-- 按⽉产⽣连续的SELECTsubstring(CONVERT(NVARCHAR(10), DateAdd(MONTH, number, '2019-01-01'),120),1,7) AS GroupDay,typeFROMmaster..spt_valuesWHERE type = 'p' AND number <= DateDiff(MONTH, '2018-01-01', '2019-01-01')-- 按天产⽣连续的SELECTCONVERT(NVARCHAR(10), DateAdd(day, number, '2019-01-01'),120) AS GroupDay,typeFROMmaster..spt_valuesWHERE type = 'p' AND number <= DateDiff(day, '2019-01-01', '2019-01-18')-- 按⼩时产⽣连续的SELECTsubstring(convert(char(32),DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),120),1,16) AS GroupDay,typeFROMmaster..spt_valuesWHERE type = 'p' AND DATEDIFF(HH,DATEADD(HH,number,CONCAT('2019-01-18',' ', '00:00')),CONCAT('2019-01-18',' ', '23:00'))>=0-- 按分钟的就⾃⼰可以YY了......四,与业务场景进⾏结合有了连续的数据过后,当然就是以时间为主,进⾏左连接。

MySQL支持按年月日查询

MySQL支持按年月日查询

MySQL支持按年月日查询在业务环境中,总是想要筛选出不同时间条件下的数据,例如我只想查询当天数据,当月数据或者本年数据。

于是就想通过MySQL自带的几个时间函数进行简单的实现。

一、SQL语句实现•Talk is cheap,show me the code.•查询当天的数据的两种方式:•1、SELECT*FROMcars_locationWHEREYEAR ( create_time ) = YEAR ( now( ) )AND MONTH ( create_time ) = MONTH ( now( ) ) AND DAY ( create_time ) = DAY ( now( ) )2、SELECT*FROMcars_locationWHEREdate( create_time ) = curdate( );查询本年:SELECT*FROM`cars_location`WHEREYEAR ( create_time ) = YEAR ( now( ) )查询本月:SELECT*FROM`cars_location`WHEREYEAR ( create_time ) = YEAR ( now( ) )AND MONTH ( create_time ) = MONTH ( now( ) )二、结合Mybatis实现首先我们来了解,假设我有一个dateFlag属性,专门用来判断前端传过来的查询时间条件,并且规定dateFlag='day’表示查询当天数据,dateFlag='month’表示查询当月数据,dateFlag='year’表示查询当年数据,以下就是mybatis的实现片段可供参考,其中需要注意在if test中的==条件后的参数需要加单引号。

<if test="dateFlag != null and dateFlag == 'day'">AND YEAR ( create_time ) = YEAR ( now( ) )AND MONTH ( create_time ) = MONTH ( now( ) )AND DAY ( create_time ) = DAY ( now( ) )</if><if test="dateFlag != null and dateFlag == 'month'">AND YEAR ( create_time ) = YEAR ( now( ) )AND MONTH ( create_time ) = MONTH ( now( ) )</if><if test="dateFlag != null and dateFlag == 'year'">AND YEAR ( create_time ) = YEAR ( now( ) )</if>三、总结通过了解MySQL的时间函数以及集合Mybatis的写法,成功对接后台实现根据dateFlag查询当日、当月或者本年的数据。

mysql按照时间分组查询的语句

mysql按照时间分组查询的语句
到此这篇关于mysql按照时间分组查询的文章就介绍到这了更多相关mysql分组查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家
mysql按 照 时 间 分 组 查 询 的 语 句
mysql 按年、月、周、日分组查询 1.按照年份分组查询
SELECT DATE_FORMAT(t.bill_time,'%Y') month_time,sum(t.pay_price) total FROM f_bill t GROUP BY month_time;
查询结果
4.按照日分组查询
SELECT DATE_FORMAT(t.bill_time,'%Y-%m-%d') month_time,sum(t.pay_price) total FROM f_bill t GROUP BY month_time;
查询结果
到此这篇关于mysql按照时间分组查询的文章搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
查询结果
2.按照月份分组查询
SELECT DATE_FORMAT(t.bill_time,'%Y-%m') month_time,sum(t.pay_price) total FROM f_bill t GROUP BY month_time;
查询结果
3.按照周分组查询
SELECT CONCAT(SUBSTR(DATE_FORMAT(t.bill_time,'%Y-%u') FROM 1 FOR 4),'第',SUBSTR(DATE_FORMAT(t.bill_time,'%Y-%u'),6),'周') week_time,sum(t.price) total FROM f_bill t GROUP BY week_time;

mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)

mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)

mysql获取指定时间段中所有⽇期或⽉份的语句(不设存储过程,不加表)mysql获取⼀个时间段中所有⽇期或者⽉份1:mysql获取时间段所有⽉份select DATE_FORMAT(date_add('2020-01-20 00:00:00', interval row MONTH),'%Y-%m') date from(SELECT @row := @row + 1 as row FROM(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,(SELECT @row:=-1) r) sewhere DATE_FORMAT(date_add('2020-01-20 00:00:00', interval row MONTH),'%Y-%m') <= DATE_FORMAT('2020-04-02 00:00:00','%Y-%m')2:mysql获取时间段所有⽇期select date_add('2020-01-20 00:00:00', interval row DAY) date from(SELECT @row := @row + 1 as row FROM(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,(SELECT @row:=-1) r) sewhere date_add('2020-01-20 00:00:00', interval row DAY) <= '2020-03-02 00:00:00'备注:这段代码表⽰数据条数限制,写两次查询的⽇期最多显⽰100条,写三次查询⽇期最多显⽰1000次,以此类推,根据你⾃⼰的需求决定下⾯是设置最多显⽰条数10000写法希望能帮助到你,萌新在线求带下⾯是其他⽹友的补充⼤家可以参考⼀下1、不使⽤存储过程,不使⽤临时表,不使⽤循环在Mysql中获取⼀个时间段的全部⽇期select a.Datefrom (select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Datefrom (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as across join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as bcross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c) awhere a.Date between '2017-11-10' and '2017-11-15'输出如下Date----------2017-11-152017-11-142017-11-132017-11-122017-11-112017-11-102、mysql获取两个⽇期内的所有⽇期列表select @num:=@num+1,date_format(adddate('2015-09-01', INTERVAL @num DAY),'%Y-%m-%d') as datefrom btc_user,(select @num:=0) t where adddate('2015-09-01', INTERVAL @num DAY) <= date_format(curdate(),'%Y-%m-%d')order by date;此⽅法优点就是不需要创建存储过程或者是⽇历表,缺点就是你必须要有⼀个表,它的数据条数⼤到⾜够⽀撑你要查询的天数3、mysql获取给定时间段内的所有⽇期列表(存储过程)DELIMITER $$DROP PROCEDURE IF EXISTS create_calendar $$CREATE PROCEDURE create_calendar (s_date DATE, e_date DATE)BEGIN-- ⽣成⼀个⽇历表SET @createSql = ‘CREATE TABLE IF NOT EXISTS calendar_custom (`date` date NOT NULL,UNIQUE KEY `unique_date` (`date`) USING BTREE)ENGINE=InnoDB DEFAULT CHARSET=utf8‘;prepare stmt from @createSql;execute stmt;WHILE s_date <= e_date DOINSERT IGNORE INTO calendar_custom VALUES (DATE(s_date)) ;SET s_date = s_date + INTERVAL 1 DAY ;END WHILE ;END$$DELIMITER ;-- ⽣成数据到calendar_custom表2009-01-01~2029-01-01之间的所有⽇期数据CALL create_calendar (‘2009-01-01‘, ‘2029-01-01‘);DELIMITER $$DROP PROCEDURE IF EXISTS create_calendar $$CREATE PROCEDURE create_calendar (s_date DATE, e_date DATE)BEGIN-- ⽣成⼀个⽇历表SET @createSql = ‘truncate TABLE calendar_custom‘;prepare stmt from @createSql;execute stmt;WHILE s_date <= e_date DOINSERT IGNORE INTO calendar_custom VALUES (DATE(s_date)) ;SET s_date = s_date + INTERVAL 1 DAY ;END WHILE ;END$$DELIMITER ;-- ⽣成数据到calendar_custom表2009-01-01~2029-01-01之间的所有⽇期数据CALL create_calendar (‘2009-01-02‘, ‘2009-01-07‘);到此这篇关于mysql获取指定时间段中所有⽇期或⽉份的语句(不设存储过程,不加表)的⽂章就介绍到这了,更多相关mysql获取指定时间段中的⽇期与⽉份内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

使用MySQL实现时间序列数据存储与查询

使用MySQL实现时间序列数据存储与查询

使用MySQL实现时间序列数据存储与查询引言时间序列数据是指按照时间顺序排列的数据集合,例如股票价格、气温变化、用户访问记录等。

在许多领域,如金融、气象、物联网等,时间序列数据的存储和查询是非常重要的。

本文将介绍如何使用MySQL数据库实现时间序列数据的存储与查询。

一、时间序列数据的特点时间序列数据具有以下几个特点:1. 时间顺序性:数据按照时间的先后顺序排列,每个数据点都与特定的时间点相关联。

2. 时间间隔:数据点之间的时间间隔可能是固定的,也可能是不固定的。

3. 数据并非独立分布:相邻的数据点之间往往具有一定的相关性,可以通过前后数据的关系进行预测和分析。

二、MySQL数据库的基本概念在开始之前,我们需要了解一些MySQL数据库的基本概念:1. 数据库:用于存储数据的容器,其中可以包含多个表格。

2. 表格:由行和列组成,用于存储相同类型的数据。

3. 列(字段):表格中的垂直数据分组,用于存储相同类型的数据。

4. 行:表格中的水平数据分组,包含了各个列的具体数值。

5. 主键:表格中唯一标识每一行数据的列。

三、时间序列数据的存储方案在MySQL数据库中,我们可以使用以下两种主要的存储方案来处理时间序列数据:1. 表格形式存储在表格形式存储方案中,我们可以创建一个表格,其中的列代表不同的时间点,行代表不同的数据指标。

例如,我们可以创建一个表格来存储每天的气温变化,其中的列可以是日期,行可以是不同的城市。

这种方式适用于时间间隔固定的情况,例如每天记录一次数据。

2. 表格索引存储在表格索引存储方案中,我们可以创建两个表格,一个主表格用于存储时间的索引,另一个子表格用于存储具体的数据。

主表格中的列可以包含时间戳和其他与时间相关的信息,而子表格中的列可以包含具体的数据指标。

这种方式适用于时间间隔不固定的情况,例如每隔一段时间记录一次数据。

四、时间序列数据的查询方法MySQL数据库提供了多种查询方法,可以用于时间序列数据的查询,以下是其中几种常见的查询方法:1. 按时间范围查询可以使用"WHERE"语句来筛选某个时间范围内的数据,例如"SELECT *FROM table WHERE time BETWEEN '2021-01-01' AND '2021-12-31'"可以查询2021年的数据。

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

mysql查询今天、昨天、近7天、近30天、本⽉、上⼀⽉的SQL语句mysql查询今天、昨天、近7天、近30天、本⽉、上⼀⽉的SQL 语句这篇⽂章主要介绍了mysql查询今天、昨天、近7天、近30天、本⽉、上⼀⽉的SQL语句,⼀般在⼀些统计报表中⽐较常⽤这个时间段,需要的朋友可以参考下mysql查询今天,昨天,近7天,近30天,本⽉,上⼀⽉数据的⽅法分析总结:话说有⼀⽂章表article,存储⽂章的添加⽂章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的⽂章总数并且按照时间从⼤到⼩排序,则查询语句如下:代码如下:select * from `article` where date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d');或者:代码如下:select * from `article` where to_days(date_format(from_UNIXTIME(`add_time`),'%Y-%m-%d')) = to_days(now());假设以上表的add_time字段的存储类型是DATETIME类型或者TIMESTAMP类型,则查询语句也可按如下写法:查询今天的信息记录:代码如下:select * from `article` where to_days(`add_time`) = to_days(now());查询昨天的信息记录:代码如下:select * from `article` where to_days(now()) – to_days(`add_time`) <= 1;查询近7天的信息记录:代码如下:select * from `article` where date_sub(curdate(), INTERVAL 7 DAY) <= date(`add_time`);查询近30天的信息记录:代码如下:select * from `article` where date_sub(curdate(), INTERVAL 30 DAY) <= date(`add_time`);查询本⽉的信息记录:代码如下:select * from `article` where date_format(`add_time`, ‘%Y%m') = date_format(curdate() , ‘%Y%m');查询上⼀⽉的信息记录:代码如下:select * from `article` where period_diff(date_format(now() , ‘%Y%m') , date_format(`add_time`, ‘%Y%m')) =1;对上⾯的SQL语句中的⼏个函数做⼀下分析:(1)to_days就像它的名字⼀样,它是将具体的某⼀个⽇期或时间字符串转换到某⼀天所对应的unix时间戳,如:代码如下:mysql> select to_days('2010-11-22 14:39:51');+--------------------------------+| to_days('2010-11-22 14:39:51') |+--------------------------------+| 734463 |+--------------------------------+mysql> select to_days('2010-11-23 14:39:51');+--------------------------------+| to_days('2010-11-23 14:39:51') |+--------------------------------+| 734464 |+--------------------------------+可以看出22⽇与23⽇的差别就是,转换之后的数增加了1,这个粒度的查询是⽐较粗糙的,有时可能不能满⾜我们的查询要求,那么就需要使⽤细粒度的查询⽅法str_to_date函数了,下⾯将分析这个函数的⽤法。

使用MySQL处理日期和时间数据的方法与技巧

使用MySQL处理日期和时间数据的方法与技巧

使用MySQL处理日期和时间数据的方法与技巧MySQL是一款广泛使用的关系型数据库管理系统,它提供了丰富的功能和灵活的操作方式。

日期和时间数据是数据库中常见的数据类型之一,对于MySQL来说,处理日期和时间数据有许多方法和技巧。

本文将介绍一些常用的方法和技巧,希望能够对大家在使用MySQL处理日期和时间数据时有所帮助。

一、存储日期和时间数据在MySQL中,存储日期和时间数据可以使用多种数据类型,常见的包括DATE、TIME、DATETIME和TIMESTAMP。

每种数据类型都有其特点和适用场景。

1. DATE类型DATE类型用于存储日期信息,其格式为YYYY-MM-DD。

例如,如果想存储2022年10月1日,可以使用DATE类型:'2022-10-01'。

2. TIME类型TIME类型用于存储时间信息,格式为HH:MM:SS。

例如,如果想存储上午8点30分,可以使用TIME类型:'08:30:00'。

3. DATETIME类型DATETIME类型用于存储日期和时间信息,其格式为YYYY-MM-DDHH:MM:SS。

例如,如果想存储2022年10月1日上午8点30分,可以使用DATETIME类型:'2022-10-01 08:30:00'。

4. TIMESTAMP类型TIMESTAMP类型也用于存储日期和时间信息,格式为YYYY-MM-DD HH:MM:SS。

与DATETIME类型不同的是,TIMESTAMP类型在存储时会将时间转换为UTC时间,然后根据时区显示。

例如,如果当前时区是东八区,存储2022年10月1日上午8点30分时,实际存储的值是UTC时间对应的时间戳。

在选择日期和时间数据类型时,需要根据实际需求和业务场景来决定。

如果只需要存储日期信息,可以使用DATE类型;如果只需要存储时间信息,可以使用TIME类型;如果需要同时存储日期和时间信息,可以使用DATETIME或TIMESTAMP类型。

Mysql_按年度、季度、月度、周、日统计查询的例子

Mysql_按年度、季度、月度、周、日统计查询的例子

Mysql 按年度、季度、月度、周、日统计查询的例子问题:开发时建表没有建立day month year 字段直接用的时间戳,但是统计时要用到按天,月,年进行排序,应该如何实现?直接用mysql可以处理:mysql没有提供unix时间戳的专门处理函数,如果遇到时间分组,而用的又是整型unix时间戳,则只有转化为mysql的其他日期类型!FROM_UNIXTIM()将unix时间戳转为datetime等日期型!下面来看具体的例子。

一、年度查询查询本年度的数据复制代码代码示例:SELECT *FROM news_infoWHERE year( FROM_UNIXTIME( BlogCreateTime ) ) = year( curdate( ))二、查询季度数据查询数据附带季度数复制代码代码示例:SELECT ArticleId, quarter( FROM_UNIXTIME( `BlogCreateTime` ) ) FROM `news_info`其他的同前面部分:查询本季度的数据复制代码代码示例:SELECT *FROM news_infoWHERE quarter( FROM_UNIXTIME( BlogCreateTime ) ) = quarter( curdate( ))三、查询月度数据本月统计(MySQL)复制代码代码示例:select * from booking where month(booking_time) =month(curdate()) and year(booking_time) = year(curdate())本周统计(MySQL)复制代码代码示例:select * from spf_booking where month(booking_time) =month(curdate()) and week(booking_time) = week(curdate())四、时间段N天内记录复制代码代码示例:WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段) <= N当天的记录复制代码代码示例:where date(时间字段)=date(now())或where to_days(时间字段) = to_days(now());查询一周:复制代码代码示例:select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);查询一个月:复制代码代码示例:select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);查询'06-03'到'07-08'这个时间段内所有过生日的会员:复制代码代码示例:Select * From user WhereDATE_FORMAT(birthday,'%m-%d') >= '06-03' andDATE_FORMAT(birthday,'%m-%d')<= '07-08';统计一季度数据,表时间字段为:savetime复制代码代码示例:group by concat(date_format(savetime, '%Y'),FLOOR((date_format(savetime, '%m ')+2)/3))或select YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1,count(*) from yourTablegroup by YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1;五、分组查询1、年度分组2、月度分组3、先按年度分组,再按月度分组4、按年月分组复制代码代码示例:SELECT count(ArticleId),date_format(FROM_UNIXTIME( `BlogCreateTime`),'%y%m') sdate FROM `news_info` group by sdate结果:复制代码代码示例:count( ArticleId ) sdate17 090111 09025 09036 09042 09051 090712 09086 090911 09103 0911select count(*)from ea_user where FROM_UNIXTIME(addtime,'%Y年%m月%d 日 %h')="2016年03月17日 10"order by addtime desc。

使用MySQL进行时序数据处理与查询的方法与技巧

使用MySQL进行时序数据处理与查询的方法与技巧

使用MySQL进行时序数据处理与查询的方法与技巧时序数据(Time Series Data)是指按照时间顺序存储的数据,它在许多领域中被广泛使用,例如金融、物联网和人工智能等。

时序数据的处理与查询是一个重要的数据处理技能,本文将介绍如何使用MySQL进行时序数据处理与查询的方法与技巧。

一、时序数据的特点时序数据具有以下几个特点,理解这些特点有助于我们更好地处理与查询时序数据。

1. 顺序性:时序数据按照时间顺序进行存储和访问。

2. 时态性:时序数据是根据时间发展变化的,因此需要关注数据的变化趋势和时间的连续性。

3. 周期性:时序数据通常具有一定的周期性,例如天、小时和分钟等。

4. 存储量大:由于时序数据按照时间顺序存储,数据量通常很大,需要进行合理的存储和索引。

二、MySQL的时序数据处理与查询方法在MySQL中,我们可以使用多种方法来处理和查询时序数据,下面将介绍几种常用的方法。

1. 使用时间戳存储时序数据在时序数据处理中,时间戳是一种常用的时间表示方式,它可以精确地表示某个时间点。

我们可以结合MySQL的日期和时间类型,例如DATETIME或TIMESTAMP,来存储时序数据。

通过合理使用日期和时间函数,我们可以对时序数据进行灵活的计算和分析。

2. 创建合适的索引对于时序数据来说,往往需要频繁地进行按时间范围的查询,因此创建合适的索引是非常重要的。

我们可以为时间列创建B树索引,以加快查询速度。

另外,还可以考虑使用分区表,将数据按照时间范围进行拆分存储,以提高查询效率。

3. 使用合适的查询语句为了更好地处理时序数据,我们需要熟悉一些常用的查询语句。

例如,我们可以使用SELECT语句结合WHERE子句来查询某个时间范围内的数据,同时还可以使用GROUP BY和ORDER BY子句进行分组和排序。

此外,还可以使用JOIN 操作将多个时序数据表关联起来,以进行更复杂的数据分析。

4. 压缩与归档数据由于时序数据的存储量通常很大,为了节省存储空间,我们可以考虑对时序数据进行压缩和归档。

mysql中常用时间段查询语句

mysql中常用时间段查询语句

在MySQL中,你可以使用`BETWEEN`关键字来查询一个时间段内的数据。

以下是一些常见的时间段查询语句的示例:1. 查询特定日期范围内的数据:```sqlSELECT * FROM table_name WHERE date_column BETWEEN '2023-01-01' AND '2023-12-31';```2. 查询特定日期和时间范围内的数据:```sqlSELECT * FROM table_name WHERE datetime_column BETWEEN '2023-01-01 00:00:00' AND '2023-12-31 23:59:59';```3. 查询最近N天内的数据:```sqlSELECT * FROM table_name WHERE date_column >= NOW() -INTERVAL N DAY;```4. 查询最近N小时内内的数据:```sqlSELECT * FROM table_name WHERE datetime_column >= NOW() - INTERVAL N HOUR;```5. 查询最近N分钟内的数据:```sqlSELECT * FROM table_name WHERE datetime_column >= NOW() - INTERVAL N MINUTE;```6. 查询最近N秒内的数据:```sqlSELECT * FROM table_name WHERE datetime_column >= NOW() - INTERVAL N SECOND;```这些示例中的`table_name`是你要查询的表名,`date_column`或`datetime_column`是包含日期的列名,`NOW()`函数返回当前日期和时间。

MySQL查询时间段内的数据

MySQL查询时间段内的数据

MySQL查询时间段内的数据先来建表语句:SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for t_user-- ----------------------------DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` (`userId` bigint(20) NOT NULL,`fullName` varchar(64) NOT NULL,`userType` varchar(16) NOT NULL,`addedTime` datetime NOT NULL,PRIMARY KEY (`userId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of t_user-- ----------------------------INSERT INTO `t_user` VALUES ('1', '爽爽', '普通', '2018-01-21 10:20:09');INSERT INTO `t_user` VALUES ('2', '贵贵', '普通', '2017-11-06 10:20:22');INSERT INTO `t_user` VALUES ('3', '芬芬', 'vip', '2017-11-13 10:20:42');INSERT INTO `t_user` VALUES ('4', '思思', 'vip', '2018-01-21 10:20:55');INSERT INTO `t_user` VALUES ('5', '妍妍', 'vip', '2017-09-17 10:21:28');下⾯是sql语句:-- 今天select fullName,addedTime from t_user where to_days(addedTime) <= to_days(now());-- 昨天select fullName,addedTime from t_user where to_days(NOW()) - TO_DAYS(addedTime) <= 1;-- 近7天select fullName,addedTime from t_user where date_sub(CURDATE(),INTERVAL 7 DAY) <= DATE(addedTime);-- 近30天SELECT fullName,addedTime FROM t_user where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(addedTime);-- 本⽉SELECT fullName,addedTime FROM t_user WHERE DATE_FORMAT( addedTime, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' );-- 上⼀⽉SELECT fullName,addedTime FROM t_user WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( addedTime, '%Y%m' ) ) =1; -- 查询本季度数据select fullName,addedTime FROM t_user where QUARTER(addedTime)=QUARTER(now());-- 查询上季度数据select fullName,addedTime FROM t_user where QUARTER(addedTime)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));-- 查询本年数据select fullName,addedTime FROM t_user where YEAR(addedTime)=YEAR(NOW());-- 查询上年数据select fullName,addedTime FROM t_user where year(addedTime)=year(date_sub(now(),interval 1 year));-- 查询距离当前现在6个⽉的数据select fullName,addedTime FROM t_user where addedTime between date_sub(now(),interval 6 month) and now();-- 查询当前这周的数据SELECT fullName,addedTime FROM t_user WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now());-- 查询上周的数据SELECT fullName,addedTime FROM t_user WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now())-1;-- 查询上个⽉的数据select fullName,addedTime FROM t_user where date_format(addedTime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');-- 查询当前⽉份的数据select fullName,addedTime FROM t_user where DATE_FORMAT(addedTime,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');select fullName,addedTime FROM t_user where date_format(addedTime,'%Y-%m')=date_format(now(),'%Y-%m');-- 查询指定时间段的数据select fullName,addedTime FROM t_user where addedTime between '2017-1-1 00:00:00' and '2018-1-1 00:00:00';select fullName,addedTime FROM t_user where addedTime >='2017-1-1 00:00:00' and addedTime < '2018-1-1 00:00:00';归纳⼀下:1、查询时间段内的数据,⼀般可以⽤between and 或 <> 来指定时间段。

mysql查询时间段

mysql查询时间段

mysql查询时间段前⾔阅读需要 3 分钟内容:mysql 时间段查询、⼀些时间的类型、及常⽤时间函数⼏个⽇期类型⽇期类型存储空间⽇期格式⽇期范围datetime8 bytes YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 timestamp 4 bytes YYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 ~ 2038 date 3 bytes YYYY-MM-DD1000-01-01 ~ 9999-12-31year 1 bytes YYYY1901 ~ 2155CREATE TABLE `t_ian_test` (`id` bigint(20) NOT NULL,`name` varchar(64) NOT NULL,`startTime` datetime NOT NULL,`endTime` datetime NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `t_ian_test` VALUES (1, '⽜', '2018-01-21 10:20:09', '2018-01-21 10:20:09');INSERT INTO `t_ian_test` VALUES (2, '年', '2021-01-29 10:20:30', '2021-01-29 10:20:30');INSERT INTO `t_ian_test` VALUES (3, '⼤', '2021-01-28 19:47:37','2021-01-28 19:47:37');INSERT INTO `t_ian_test` VALUES (4, '吉', '2021-01-28 19:51:01','2021-01-28 19:51:01');查询时间段查询 28 号这天的所有数据 - failselect * from t_ian_test where startTime between '2021-01-28' and '2021-01-28';select * from t_ian_test where startTime between '2021-01-28 00:00:00' and '2021-01-28 00:00:00';查询 28 号这天的所有数据 - successselect * from t_ian_test where startTime between '2021-01-28 19:47:37' and '2021-01-28 19:51:01';查询 28 号这天的所有数据 - successselect * from t_ian_test where startTime between '2021-01-28' and '2021-01-29';查询 28 号这天的所有数据 - successselect * from t_ian_test where startTime between '2021-01-28' and date_add('2021-01-28', interval 1 day);获取系统当前时间的函数:select CURDATE();select NOW();获取时间差的函数:period_diff()datediff(date1,date2)timediff(time1,time2)⽇期加减函数:date_sub() 、adddate()、addtime()、period_add(P,N)# 加1天select date_add(now(), interval 1 day);#加1⼩时select date_add(now(), interval 1 hour);# 加1分钟select date_add(now(), interval 1 minute);#加1秒select date_add(now(), interval 1 second);#加1毫秒select date_add(now(), interval 1 microsecond);#加1周select date_add(now(), interval 1 week);#加1⽉select date_add(now(), interval 1 month);#加1季select date_add(now(), interval 1 quarter);#加1年select date_add(now(), interval 1 year);时间格式转化函数:date_format(date, format)str_to_date(str, format)unix_timestamp()from_unixtime(unix_timestamp, format)。

MySql查询当天、本周、本月、本季度、本年的数据

MySql查询当天、本周、本月、本季度、本年的数据

MySql查询当天、本周、本⽉、本季度、本年的数据1.今天SELECT * FROM 表名 WHERE TO_DAYS(时间字段名) = TO_DAYS(NOW());2.昨天SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段名) <= 1;3.本周SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段名,'%Y-%m-%d')) = YEARWEEK(NOW());4.上周SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段名,'%Y-%m-%d')) = YEARWEEK(NOW())-1;5.近7天SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(时间字段名);6.近30天SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(时间字段名);7.本⽉SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');8.上⽉SELECT * FROM 表名 WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'),DATE_FORMAT(时间字段名,'%Y%m')) = 1;SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ;SELECT * FROM 表名 WHERE WEEKOFYEAR(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = WEEKOFYEAR(NOW());SELECT * FROM 表名 WHERE MONTH(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = MONTH(NOW());SELECT * FROM 表名 WHERE YEAR(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = YEAR(NOW()) AND MONTH(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = MONTH(NOW());9.近6个⽉SELECT * FROM 表名 WHERE 时间字段名 BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW();10.本季度SELECT * FROM 表名 WHERE QUARTER(时间字段名) = QUARTER(NOW());11.上季度SELECT * FROM 表名 WHERE QUARTER(时间字段名) = QUARTER(DATE_SUB(NOW(),INTERVAL 1 QUARTER));12.本年SELECT * FROM 表名 WHERE YEAR(时间字段名)=YEAR(NOW());13.去年SELECT * FROM 表名 WHERE YEAR(时间字段名) = YEAR(DATE_SUB(NOW(),INTERVAL 1 YEAR));。

MySql查询当天、本周、本月、本季度、本年的数据

MySql查询当天、本周、本月、本季度、本年的数据

MySql查询当天、本周、本⽉、本季度、本年的数据1.今天SELECT * FROM 表名 WHERE TO_DAYS(时间字段名) = TO_DAYS(NOW());2.昨天SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段名) <= 1;3.本周SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段名,'%Y-%m-%d')) = YEARWEEK(NOW());4.上周SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段名,'%Y-%m-%d')) = YEARWEEK(NOW())-1;5.近7天SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(时间字段名);6.近30天SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(时间字段名);7.本⽉SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');8.上⽉SELECT * FROM 表名 WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'),DATE_FORMAT(时间字段名,'%Y%m')) = 1;SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ;SELECT * FROM 表名 WHERE WEEKOFYEAR(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = WEEKOFYEAR(NOW());SELECT * FROM 表名 WHERE MONTH(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = MONTH(NOW());SELECT * FROM 表名 WHERE YEAR(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = YEAR(NOW()) AND MONTH(FROM_UNIXTIME(时间字段名,'%y-%m-%d')) = MONTH(NOW());9.近6个⽉SELECT * FROM 表名 WHERE 时间字段名 BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW();10.本季度SELECT * FROM 表名 WHERE QUARTER(时间字段名) = QUARTER(NOW());11.上季度SELECT * FROM 表名 WHERE QUARTER(时间字段名) = QUARTER(DATE_SUB(NOW(),INTERVAL 1 QUARTER));12.本年SELECT * FROM 表名 WHERE YEAR(时间字段名)=YEAR(NOW());13.去年SELECT * FROM 表名 WHERE YEAR(时间字段名) = YEAR(DATE_SUB(NOW(),INTERVAL 1 YEAR));⽹络来源:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-> 198653
注意,对于可选参数 0 或 1,周值的返回值不同于 WEEK() 函数所返回值(0), WEEK() 根据给定的年语境返回周值。
HOUR(time)
返回 time 的小时值,范围为 0 到 23:
mysql> SELECT HOUR(’10:05:03’);
-> 10
$sql="SELECT video_id,count(id)as n FROM `rec_down` WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(add_time)<=86400 group by video_id order by n desc ";
$sql="select a.id,a.title,b.n from video_info a,(".$sql.")b where a.id=b.video_id order by n desc limit 20";
N天内记录
WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段) <= N
值 含义
0 一周以星期日开始,返回值范围为 0-53
1 一周以星期一开始,返回值范围为 0-53
2 一周以星期日开始,返回值范围为 1-53
3 一周以星期一开始,返回值范围为 1-53 (ISO 8601)
mysql> SELECT WEEK(’1998-02-20’);
-> ’February’
QUARTER(date)
返回 date 在一年中的季度,范围为 1 到 4:
mysql> SELECT QUARTER(’98-04-01’);
-> 2
WEEK(date)
WEEK(date,first)
对于星期日是一周中的第一天的场合,如果函数只有一个参数调用,返回 date 为一年的第几周,返回值范围为 0 到 53 (是的,可能有第 53 周的开始)。两个参数形式的 WEEK() 允许你指定一周是否以星期日或星期一开始,以及返回值为 0-53 还是 1-52。 这里的一个表显示第二个参数是如何工作的:
查询一个月:
select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= dat方法
时间格式为2008-06-16 查询出当天数据: SELECT * FROM `table` WHERE date(时间字段) = curdate();
mysql> SELECT YEAR(’2000-01-01’), WEEK(’2000-01-01’,0);
-> 2000, 0
mysql> SELECT WEEK(’2000-01-01’,2);
-> 52
你可能会争辩说,当给定的日期值实际上是 1999 年的第 52 周的一部分时,MySQL 对 WEEK() 函数应该返回 52。我们决定返回 0 ,是因为我们希望该函数返回“在指定年份中是第几周”。当与其它的提取日期值中的月日值的函数结合使用时,这使得 WEEK() 函数的用法可靠。 如果你更希望能得到恰当的年-周值,那么你应该使用参数 2 或 3 做为可选参数,或者使用函数 YEARWEEK() :
DAYOFYEAR(date)
返回 date 是一年中的第几天,范围为 1 到 366:
mysql> SELECT DAYOFYEAR(’1998-02-03’);
-> 34
MONTH(date)
返回 date 中的月份,范围为 1 到 12:
mysql> SELECT MONTH(’1998-02-03’);
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; //真方便,以前都是自己写的,竟然不知道有这,失败.
DAYOFWEEK(date)
返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的标准。
select * from wap_content where week(created_at) = week(now)
如果你要严格要求是某一年的,那可以这样
查询一天:
select * from table where to_days(column_time) = to_days(now());
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’);
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
这些函数执行日期的算术运算。ADDDATE() 和 SUBDATE() 分别是 DATE_ADD() 和 DATE_SUB() 的同义词。 在 MySQL 3.23 中,如果表达式的右边是一个日期值或一个日期时间型字段,你可以使用 + 和 - 代替 DATE_ADD() 和 DATE_SUB()(示例如下)。 参数 date 是一个 DATETIME 或 DATE 值,指定一个日期的开始。expr 是一个表达式,指定从开始日期上增加还是减去间隔值。expr 是一个字符串;它可以以一个 “-” 领头表示一个负的间隔值。type 是一个关键词,它标志着表达式以何格式被解释。
今天的记录
where date(时间字段)=date(now())

where to_days(时间字段) = to_days(now());
查询一周:
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
查询一个月:
select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);
查询选择所有 date_col 值在最后 30 天内的记录。
mysql> SELECT something FROM tbl_name
返回时期 P1 和 P2 之间的月数。P1 和 P2 应该以 YYMM 或 YYYYMM 指定。 注意,时期参数 P1 和 P2 不是 日期值:
mysql> SELECT PERIOD_DIFF(9802,199703);
-> 11
DATE_ADD(date,INTERVAL expr type)
-> 2
DAYNAME(date)
返回 date 的星期名:
mysql> SELECT DAYNAME("1998-02-05");
-> ’Thursday’
MONTHNAME(date)
返回 date 的月份名:
mysql> SELECT MONTHNAME("1998-02-05");
-> 7
mysql> SELECT WEEK(’1998-02-20’,0);
-> 7
mysql> SELECT WEEK(’1998-02-20’,1);
-> 8
mysql> SELECT WEEK(’1998-12-31’,1);
-> 53
注意,在版本 4.0 中,WEEK(#,0) 被更改为匹配 USA 历法。 注意,如果一周是上一年的最后一周,当你没有使用 2 或 3 做为可选参数时,MySQL 将返回 0:
mysql> SELECT DAYOFWEEK(’1998-02-03’);
-> 3
WEEKDAY(date)
返回 date 的星期索引(0 = Monday, 1 = Tuesday, ... 6 = Sunday):
mysql> SELECT WEEKDAY(’1998-02-03 22:23:00’);
select * from table where date(column_time) = curdate();
查询一周:
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
查询上一个月的呢?变通一下! SELECT * FROM `table` WHERE month( from_unixtime( reg_time ) ) = month( now( ) ) -1;
copyright本文来自德仔工作室 /
24小时内记录(即86400秒)
mysql> SELECT YEARWEEK(’2000-01-01’);
-> 199952
mysql> SELECT MID(YEARWEEK(’2000-01-01’),5,2);
-> 52
YEAR(date)
相关文档
最新文档