Mysql查询时间区间日期列表,不会由于数据表数据影响


Posted in MySQL onApril 19, 2022

1、查询时间区间日期列表,不会由于数据表数据影响

select a.date 
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as date
    from (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 a
    cross 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 b
    cross 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
    cross 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 d
) a
where a.date between '2020-01-20' and '2021-12-24' ORDER BY a.date asc

 tips:如果要查询当前日期后面的数据 curdate()改为截止日期就好

2、创建视图可以公共使用

CREATE VIEW v_digits AS
  SELECT 0 AS digit 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;
 
CREATE VIEW v_numbers AS
  SELECT
    ones.digit + tens.digit * 10 + hundreds.digit * 100 + thousands.digit * 1000 AS number
  FROM
    v_digits as ones,
    v_digits as tens,
    v_digits as hundreds,
    v_digits as thousands;
		
-- 生成的日期格式为  yyyy-MM-dd		
CREATE VIEW v_dates AS
  SELECT
    SUBDATE(CURRENT_DATE(), number) AS date
  FROM
    v_numbers
  UNION ALL
  SELECT
    ADDDATE(CURRENT_DATE(), number + 1) AS date
  FROM
    v_numbers;
 
-- 生成的日期格式为 yyyy-MM
CREATE VIEW v_months AS
  SELECT
    DATE_FORMAT(SUBDATE(CURRENT_DATE(), INTERVAL number MONTH),'%Y-%m')  AS date
  FROM
    v_numbers
  UNION ALL
  SELECT
    DATE_FORMAT(ADDDATE(CURRENT_DATE(), INTERVAL number+1 MONTH),"%Y-%m") AS date
  FROM
    v_numbers;

Mysql查询时间区间日期列表,不会由于数据表数据影响

3、创建为视图之后,可以通过视图查询时间区间列表日期

SELECT
  date
FROM
  v_dates
WHERE
  date BETWEEN '2020-01-20' AND '2021-01-24'
ORDER BY
  date asc

Mysql查询时间区间日期列表,不会由于数据表数据影响

4、查询时间区间按月

select DATE_FORMAT(str_to_date (a.Date,'%Y-%m-%d'),"%Y-%m") as Date 
from (
    select '2011-12-24' - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) MONTH as Date
    from (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 a
    cross 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 b
    cross 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
    cross 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 d
) a
where a.Date between '2010-01-20' and '2011-12-24' ORDER BY a.Date asc;

Mysql查询时间区间日期列表,不会由于数据表数据影响

附:在对mysql的时间进行区间查询的时候出现的问题

<if test="searchcondition.starttime!=null">
    <![CDATA[ and select_data.data_time  >= #{searchcondition.starttime,jdbcType=TIMESTAMP} ]]>
</if>

<if test="searchcondition.stoptime!=null">
    <![CDATA[ and select_data.data_time <= #{searchcondition.stoptime,jdbcType=TIMESTAMP} ]]>
</if>

在test中不能使用searchcondition.stoptime!=’ ‘这个判断会报错,上面的是标准的时间查询,自己做的时候总是会加上!=’ ‘这个条件.所以总是报错,记录一下.

总结

到此这篇关于Mysql查询时间区间日期列表的文章就介绍到这了!

MySQL 相关文章推荐
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
MySQL优化及索引解析
Mar 17 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
关于MySQL中explain工具的使用
May 08 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
CentOS MySql8 远程连接实战
Mysql排查分析慢sql之explain实战案例
Apr 19 #MySQL
MySQL视图概念以及相关应用
mysql 乱码 字符集latin1转UTF8
Apr 19 #MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 #MySQL
为什么MySQL8新特性会修改自增主键属性
You might like
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
关于svn冲突的解决方法
2013/06/21 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
vue的mixins属性详解
2018/03/14 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 字典dict使用介绍
2014/11/30 Python
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
如何在sublime编辑器中安装python
2020/05/20 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
幼儿园校车司机的岗位职责
2014/01/30 职场文书
社会实践活动总结格式
2015/05/11 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
关于的python五子棋的算法
2022/05/02 Python