Mysql 去年、前年、上季度、上两个季度写法
1 场景:
需要获取当前时间点之前的时间段,比如 去年、前年、上个月、上个季度等等,在这里进行处理的都是最早的开始时间到截止时间,比如:
1.当前时间为‘2023-02-14’,去年就应该是 ‘2022-01-01’~‘2022-12-31’
2.上个季度,应该是‘2022-10-01’~‘2022-12-31’
2 解决思路
- 通过java代码实现,使用日期工具类拼接日期
- 通过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 去年、前年、上季度、上两个季度写法相关推荐
- mysql和windows连接不上_问题-jdbc连接不上mysql,windows下开启两个mysql服务
1.问题: 前两天安装了个php 环境- wamp,由于我自己电脑上本身带有 mysql的数据库,在安装完后,没有注意到,mysql已经指向了 刚安装好的wamp里的mysql .导致 之前的 mys ...
- win7系统mysql连接不上数据库吗_Win7系统使用数据库时mysql频繁掉线无法连接的两种解决方法...
近日有windows7 64位旗舰版系统用户在使用mysql数据库的时候,发现mysql总是频繁掉线,导致无法连接,遇到这样的问题该如何解决呢?接下来为大家带来Win7系统使用数据库时mysql频繁掉 ...
- Windows上同时安装两个数据库
由于在mysql8.0无法兼容mysql5.7,但又对这两个都有需求,所以可以在系统上同时装两个数据库,在使用时候,进行选择即可.(我已经安装了8.0,这里是在此基础上安装5.7) mysql5.7网 ...
- MySQL——高阶语句(上)
MySQL高阶语句(上) 一.MySQL高级语句 1.ORDER BY----按关键字排序 单字段排序 多字段排序 2.OR/AND----或/且 3.DISTINCT----查询不重复记录 4.GR ...
- Mysql数据库(七)——mysql高阶语句(上)
Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...
- 【数据库运维】MYSQL备份恢复管理(上)
目录 MYSQL备份恢复管理 一,备份类型 二,逻辑备份优缺点 三,MySQL备份内容 四,MySQL备份工具 五,MySQL备份策略 1,策略一:直接拷贝数据库文件 案例:直接拷贝备份数据库comp ...
- 【MySQL】如何把Windows上的MySQL数据库迁移到Linux服务器上
目录 1. 前言 2. 物理备份与逻辑备份 3. mysqldump实现逻辑备份 4. 逻辑恢复 1. 前言 最近在学黑马的<瑞吉外卖>,前期的基础版本一致在 Windows 电脑上开发, ...
- MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法
MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法 参考文章: (1)MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法 (2)https:// ...
- Kaggle上主要有两大方法:梯度提升机和深度学习
Python深度学习: 在2016年和2017年,Kaggle上主要有两大方法:梯度提升机和深度学习.具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题.使用前一种方法的 ...
最新文章
- Python基础实战之函数的参数讲解(三)
- 图的广度优先遍历算法流程图
- java中application后缀_编译JavaApplication源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为...
- 必须要GPT-3吗?不,BERT的MLM模型也能小样本学习
- 2013\National _C_C++_A\4.约数倍数选卡片
- Java一些八卦集合类
- Asp:Response对象
- JavaFX 8的弹出式编辑器
- Json-转自菜鸟教程
- OpenCV中直方图均衡化
- 变分法理解2——基本方法
- SAP License:关于集团管控模式的几点思考
- 《设计模式解析(第2版•修订版)》—第1章 1.4节应对变化:使用功能分解
- TCP/IP参考模型入门
- 转载:关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解..
- steam无法连接至计算机,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
- 关于Document类型的总结
- iPad/iPhone 邮件 设置浙大邮箱
- go语言map底层数据结构
- 文本深度表示模型——word2vecdoc2vec词向量模型(转)
热门文章
- 帝国网站管理系统网站迁移教程
- Android平台接入Html5产品的个人总结
- selenium自动化测试简单准备
- 阅读心得:Learning a Neural Solver for Multiple Object Tracking
- java火柴游戏_求一个“JAVA拿火柴小游戏”的程序要求如下!!!!!!!跪求!!!!!...
- Appium安装及环境配置
- Photoshop教程中文字工具相关六大知识点介绍
- 【晶振专题】案例:晶振供应商提供的晶振匹配测试报告能看出什么?
- 你打算买新版 Mac Book 吗?- 鸟语花香[01]
- GPT-4 的 6 个最佳使用场景