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字符串截取函数小结
Apr 05 MySQL
MySQL root密码的重置方法
Apr 21 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
MySQL优化之如何写出高质量sql语句
May 17 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
MySQL 字符集 character
May 04 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
MySQL优化之慢日志查询
Jun 10 MySQL
MYSQL中文乱码问题的解决方案
Jun 14 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php md5下16位和32位的实现代码
2008/04/09 PHP
php微信开发之图片回复功能
2018/06/14 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
Python3.x对JSON的一些操作示例
2017/09/01 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python实现车牌识别的示例代码
2019/08/05 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
J2EE面试题大全
2016/08/06 面试题
新娘父亲婚礼致辞
2014/01/16 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
给老师的感谢信
2015/01/20 职场文书
女儿满月酒致辞
2015/07/29 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python