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 相关文章推荐
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
May 26 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
将MySQL的表数据全量导入clichhouse库中
Mar 21 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
关于mysql中string和number的转换问题
Jun 14 MySQL
MySQL数据管理操作示例讲解
Dec 24 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
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP header函数分析详解
2011/08/06 PHP
php简单的会话类代码
2011/08/08 PHP
19个Android常用工具类汇总
2014/12/30 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
python中日期和时间格式化输出的方法小结
2015/03/19 Python
Python判断Abundant Number的方法
2015/06/15 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
阳光体育活动总结
2014/04/30 职场文书
悬空寺导游词
2015/02/05 职场文书
廉洁自律个人总结
2015/02/14 职场文书
病人慰问信范文
2015/02/15 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang