1 场景:

需要获取当前时间点之前的时间段,比如 去年、前年、上个月、上个季度等等,在这里进行处理的都是最早的开始时间到截止时间,比如:
1.当前时间为‘2023-02-14’,去年就应该是 ‘2022-01-01’~‘2022-12-31’
2.上个季度,应该是‘2022-10-01’~‘2022-12-31’

2 解决思路

  1. 通过java代码实现,使用日期工具类拼接日期
  2. 通过mysql函数实现

mysql函数

CREATE  FUNCTION `util_to_str`(util varchar(255),number int) RETURNS varchar(255) CHARSET utf8 COLLATE utf8_unicode_ci
BEGIN
DECLARE result VARCHAR(255) DEFAULT '';
DECLARE start_time VARCHAR(255) DEFAULT '';
DECLARE end_time VARCHAR(255) DEFAULT '';
IF(util = 'YEAR')
THEN
SET start_time= date_add(date_format(now(), '%y-01-01'),interval number YEAR);
SET end_time= date_add(date_format(now(), '%y-12-31'),interval -1 YEAR);ELSEIF(util = 'QUARTER')
THEN
IF(QUARTER(NOW())=1) THEN
SET start_time= date_add(date_sub(date_format(now(), '%y-01-%d'),interval extract(day from now()) - 1 day),interval number QUARTER);
SET end_time= date_add(date_sub(date_format(now(), '%y-01-%d'),interval extract(day from now()) day),interval 0 QUARTER); ELSEIF(QUARTER(NOW())=2) THEN
SET start_time= date_add(date_sub(date_format(now(), '%y-04-%d'),interval extract(day from now()) - 1 day),interval number QUARTER);
SET end_time= date_add(date_sub(date_format(now(), '%y-04-%d'),interval extract(day from now()) day),interval 0 QUARTER); ELSEIF(QUARTER(NOW())=3) THEN
SET start_time= date_add(date_sub(date_format(now(), '%y-07-%d'),interval extract(day from now()) - 1 day),interval number QUARTER);
SET end_time= date_add(date_sub(date_format(now(), '%y-07-%d'),interval extract(day from now()) day),interval 0 QUARTER);  ELSEIF(QUARTER(NOW())=4) THEN
SET start_time= date_add(date_sub(date_format(now(), '%y-10-%d'),interval extract(day from now()) - 1 day),interval number QUARTER);
SET end_time= date_add(date_sub(date_format(now(), '%y-10-%d'),interval extract(day from now()) day),interval 0 QUARTER);  END IF;  ELSEIF(util = 'MONTH')
THEN
SET start_time= date_add(date_sub(date_format(now(), '%y-%m-%d'),interval extract(day from now()) - 1 day),interval number MONTH);
SET end_time= date_add(date_sub(date_format(now(), '%y-%m-%d'),interval extract(day from now()) day),interval 0 MONTH); ELSEIF(util = 'WEEK')
THEN
SET start_time= date_add( DATE_SUB(date_format(now(), '%y-%m-%d'), INTERVAL WEEKDAY(date_format(now(), '%y-%m-%d')) DAY), INTERVAL number WEEK);
SET end_time= date_add(date_add( DATE_SUB(date_format(now(), '%y-%m-%d'), INTERVAL WEEKDAY(date_format(now(), '%y-%m-%d')) DAY), INTERVAL -1 WEEK),INTERVAL 6 day);END IF;
SET result = CONCAT(start_time,' AND ',end_time) ;
RETURN result;
END

输入两个参数,一个String作为单位:year、week、month…,另一个int是一个数字,表示往前推多久。(这里关于周和季度做了处理,mysql 一周开始是周日;还有季度 mysql是直接往前推了三个月,达不到我要的效果,我就直接把他写死了,可以按照自己需求更改)

我这边的数字输入为负数,因为我用的是
DATE_ADD(date,INTERVAL expr unit) 函数,里面参数分别表示

  • date: 输入一个日期就好了
  • INTERVAL: 区间 这个不需要我们输入
  • expr: 偏移量 表示往后推多少(加)
  • unit: 单位,mysql自带的 年月日啊相关的单位

还有一个DATE_SUB(date,INTERVAL expr unit) ,和上面的用法一样,只不过这个是减去 expr。

Mysql 去年、前年、上季度、上两个季度写法相关推荐

  1. mysql和windows连接不上_问题-jdbc连接不上mysql,windows下开启两个mysql服务

    1.问题: 前两天安装了个php 环境- wamp,由于我自己电脑上本身带有 mysql的数据库,在安装完后,没有注意到,mysql已经指向了 刚安装好的wamp里的mysql .导致 之前的 mys ...

  2. win7系统mysql连接不上数据库吗_Win7系统使用数据库时mysql频繁掉线无法连接的两种解决方法...

    近日有windows7 64位旗舰版系统用户在使用mysql数据库的时候,发现mysql总是频繁掉线,导致无法连接,遇到这样的问题该如何解决呢?接下来为大家带来Win7系统使用数据库时mysql频繁掉 ...

  3. Windows上同时安装两个数据库

    由于在mysql8.0无法兼容mysql5.7,但又对这两个都有需求,所以可以在系统上同时装两个数据库,在使用时候,进行选择即可.(我已经安装了8.0,这里是在此基础上安装5.7) mysql5.7网 ...

  4. MySQL——高阶语句(上)

    MySQL高阶语句(上) 一.MySQL高级语句 1.ORDER BY----按关键字排序 单字段排序 多字段排序 2.OR/AND----或/且 3.DISTINCT----查询不重复记录 4.GR ...

  5. Mysql数据库(七)——mysql高阶语句(上)

    Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...

  6. 【数据库运维】MYSQL备份恢复管理(上)

    目录 MYSQL备份恢复管理 一,备份类型 二,逻辑备份优缺点 三,MySQL备份内容 四,MySQL备份工具 五,MySQL备份策略 1,策略一:直接拷贝数据库文件 案例:直接拷贝备份数据库comp ...

  7. 【MySQL】如何把Windows上的MySQL数据库迁移到Linux服务器上

    目录 1. 前言 2. 物理备份与逻辑备份 3. mysqldump实现逻辑备份 4. 逻辑恢复 1. 前言 最近在学黑马的<瑞吉外卖>,前期的基础版本一致在 Windows 电脑上开发, ...

  8. MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法

    MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法 参考文章: (1)MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法 (2)https:// ...

  9. Kaggle上主要有两大方法:梯度提升机和深度学习

    Python深度学习: 在2016年和2017年,Kaggle上主要有两大方法:梯度提升机和深度学习.具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题.使用前一种方法的 ...

最新文章

  1. Python基础实战之函数的参数讲解(三)
  2. 图的广度优先遍历算法流程图
  3. java中application后缀_编译JavaApplication源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为...
  4. 必须要GPT-3吗?不,BERT的MLM模型也能小样本学习
  5. 2013\National _C_C++_A\4.约数倍数选卡片
  6. Java一些八卦集合类
  7. Asp:Response对象
  8. JavaFX 8的弹出式编辑器
  9. Json-转自菜鸟教程
  10. OpenCV中直方图均衡化
  11. 变分法理解2——基本方法
  12. SAP License:关于集团管控模式的几点思考
  13. 《设计模式解析(第2版•修订版)》—第1章 1.4节应对变化:使用功能分解
  14. TCP/IP参考模型入门
  15. 转载:关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解..
  16. steam无法连接至计算机,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
  17. 关于Document类型的总结
  18. iPad/iPhone 邮件 设置浙大邮箱
  19. go语言map底层数据结构
  20. 文本深度表示模型——word2vecdoc2vec词向量模型(转)

热门文章

  1. 帝国网站管理系统网站迁移教程
  2. Android平台接入Html5产品的个人总结
  3. selenium自动化测试简单准备
  4. 阅读心得:Learning a Neural Solver for Multiple Object Tracking
  5. java火柴游戏_求一个“JAVA拿火柴小游戏”的程序要求如下!!!!!!!跪求!!!!!...
  6. Appium安装及环境配置
  7. Photoshop教程中文字工具相关六大知识点介绍
  8. 【晶振专题】案例:晶振供应商提供的晶振匹配测试报告能看出什么?
  9. 你打算买新版 Mac Book 吗?- 鸟语花香[01]
  10. GPT-4 的 6 个最佳使用场景