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 Show Profile
Apr 05 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
MySQL Router实现MySQL的读写分离的方法
May 27 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
MySQL自定义函数及触发器
Aug 05 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
php 全局变量范围分析
2009/08/07 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
vue实现登录拦截
2020/06/29 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
Ajax和javascript的区别
2013/07/20 面试题
称象教学反思
2014/02/03 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
校长一岗双责责任书
2015/05/09 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
Linux中如何安装并部署Redis
2022/04/18 Servers