sql日期函数

news2024/9/20 18:44:28

目录

sql日期函数

1.获取日期时间函数

1.1 获取当前日期时间

1.2 获取当前日期

1.3 获取当前时间

2.datetime数据类型格式化

 3.字符串数据类型转换成datetime数据类型

4.增加和减少时间间隔

5. 日期相差天数(天)

6. 相差时间(小时)

7. 返回日期date的星期索引

案例:统计沪深两市T日(当前股票交易日)每分钟达到涨跌停股票的数据

 1.分析sql

 2.设置接口

3.书写业务代码

4.mapper接口

5.mapperXml文件

6.结果


sql日期函数

1.获取日期时间函数

1.1 获取当前日期时间

SELECT NOW(); # 2024-01-06 22:37:45

1.2 获取当前日期

SELECT CURRENT_DATE(); # 2024-01-06

1.3 获取当前时间

SELECT CURRENT_TIME(); # 22:39:04

2.datetime数据类型格式化

SELECT DATE_FORMAT('2024-01-08 22:23:01', '%Y%m%d%H%i%s');# 20240108222301
说明:
%W 星期名字(Sunday……Saturday) 
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位 ★★★
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31) ★★★
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12) ★★★ month
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)★★★
%k 小时(0……23)
%h 小时(01……12) 
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59) ★★★ minite
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59) ★★★
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天,查询指定日期属于当前年份的第几个周 ★★★★
%u 星期(0……52), 这里星期一是星期的第一天

#格式化时间(datetime到string类型)
#使用%U-->计算当天是一年中的第几周
select date_format('2024-08-30 19:16:17','%Y/%m/%d %H:%i:%s--%U'); #2024/08/30 19:16:17--34

 3.字符串数据类型转换成datetime数据类型

要求:# 日期格式与表达式格式一致即可

#解析string类型成datetime类型
select str_to_date('06/01/2024','%m/%d/%Y');#2024-06-01

4.增加和减少时间间隔

#增加一个时间间隔
#将当前日期加两天
select date_add(now(),interval 2 day);#2024-09-01 19:27:11
#将当前日期减两天
select date_add(now(),interval -2 day );#2024-08-28 19:28:04
#将当前日期加两个月
select date_add(now(),interval 2 month );#2024-10-30 19:28:49
select date_add('2024-08-30 19:16:17',interval 2 day);#2024-09-01 19:16:17

#减少一个时间间隔
select date_sub('2024-08-30 19:16:17',interval 2 day);#2024-08-28 19:16:17

5. 日期相差天数(天)

select datediff('2024-01-06','2024-12-28'); -- 9

6. 相差时间(小时)

select timediff('2024-01-06 08:08:08', '2024-12-28 09:00:00'); -- 08:08:08

7. 返回日期date的星期索引

# 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

SELECT DAYOFWEEK(NOW())-1;

# 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)

SELECT WEEKDAY(NOW())+1 ;

案例:统计沪深两市T日(当前股票交易日)每分钟达到涨跌停股票的数据

功能描述:统计沪深两市T日(当前股票交易日)每分钟达到涨跌停股票的数据

注意:如果不在股票的交易日内,则统计最近的股票交易日下的数据

返回的数据

{
    "code": 1,
    "data": {
        "upList": [
            {
                "count": 1,//涨停数量
                "time": "202112311412"//当天分时
            },
           {
                "count": 3,//涨停数量
                "time": "202112311413"//当天分时
            },
          	//省略......
        ],
        "downList": [
            {
                "count": 2,//跌停数量
                "time": "202112310925"//当天分时
            },
			//省略......
        ]
    }
}

 1.分析sql

#1.使用的表 :stock_rt_info(个股流水表)
#2.业务分析
    #1. 涨停:通过判断涨幅(使用的字段是cur_price,pre_close_price)是否>0.1得到该个股是否到达涨停
    #2. 时间范围:当前交易日的开盘点到当前最新交易点的时间,如果不是交易日,就使用上一个交易日,使用between and
    #3. 分组:通过时间来分组,每分钟一组
#3.返回的字段 count time
select
        (cur_price-pre_close_price)/pre_close_price as ud,
        cur_time as time
from stock_rt_info
where cur_time BETWEEN '2022-01-06 09:30:00' and '2022-01-06 14:25:00'
having ud>=0.1;

然后我们再将该表作为一张表,以时间分组,统计相同时间的个股的数量

#合并
select tmp.time,count(*) as count from (select
                     (cur_price-pre_close_price)/pre_close_price as ud,
                     cur_time as time
             from stock_rt_info
             where cur_time BETWEEN '2022-01-06 09:30:00' and '2022-01-06 14:25:00'
             having ud>=0.1) as tmp
group by tmp.time;

 

设置返回时间的格式

#设置返回时间的格式
select tmp.time,count(*) as count from (select
                                                (cur_price-pre_close_price)/pre_close_price as ud,
                                                date_format(cur_time,'%Y%m%d%H%i%s') as time
                                        from stock_rt_info
                                        where cur_time BETWEEN '2022-01-06 09:30:00' and '2022-01-06 14:25:00'
                                        having ud>=0.1) as tmp
group by tmp.time;

 2.设置接口

  @GetMapping("/stock/updown/count")
    @ApiOperation("沪深两市T日(当前股票交易日)每分钟达到涨跌停股票的数据")
    public R<Map<String,List>>getStockUpdownCount(){
        return stockService.getStockUpdownCount();
    }

返回的数据只有两个属性upList,downList可以作为一个Map集合,然后这两个属性的值为List

3.书写业务代码

 @Override
    public R<Map<String, List>> getStockUpdownCount() {
        //1.获取当前时间的最新交易点
        DateTime dateTime = DateTimeUtil.getLastDate4Stock(DateTime.now());
        Date time =dateTime.toDate();
        //获取开盘点
        Date openDate = DateTimeUtil.getOpenDate(dateTime).toDate();
        //设置mock data
        openDate=DateTime.parse("2022-01-06 09:30:00",DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();
        time=DateTime.parse("2022-01-06 14:25:00",DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();
        //2.调用接口获取每分钟内涨跌停的个股数量
        //获取涨停
        List<Map>upList=stockRtInfoMapper.getStockUpdownCount(openDate,time,1);
        //获取跌停
        List<Map>downList=stockRtInfoMapper.getStockUpdownCount(openDate,time,0);
        //3.封装数据
        Map<String,List>data=new HashMap<>();
        data.put("upList",upList);
        data.put("downList",downList);
        //4.返回数据
        return R.ok(data);
    }

4.mapper接口

   /**
     * 获取每分钟内个股的涨跌停数量
     * @param openDate 开盘时间
     * @param time 当前时间的最新交易点
     * @param flag 1为涨停 0为跌停
     */
    List<Map> getStockUpdownCount(@Param("openDate") Date openDate, @Param("time") Date time, @Param("flag") int flag);

5.mapperXml文件

<!--  这里不能使用java.util.Map  -->
    <select id="getStockUpdownCount" resultType="map">
        select
        date_format(tmp.time,'%Y%m%d%H%i') as time ,
        count(*) as count
        from (select
        (sri.cur_price-sri.pre_close_price)/sri.pre_close_price as ud,
        sri.cur_time as time
        from stock_rt_info sri
        where sri.cur_time BETWEEN #{openDate} and #{time}
        having ud
        <if test="flag==1">
            >=0.1
        </if>
        <if test="flag==0">
            &lt;=-0.1
        </if>
        )
        as tmp
        group by tmp.time
        order by tmp.time asc
    </select>

6.结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2103786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitHub Star 数量前 11 的开源内部工具

欢迎回到我们的 GitHub Star 系列文章&#xff01; 在之前的文章中&#xff0c;我们深入探讨了 GitHub 上最受欢迎的开源低代码项目《GitHub Star 数量前 15 的开源低代码项目》和开源无代码工具《GitHub Star 数量前 12 的开源无代码工具》&#xff0c;获得了热烈的反馈。本周…

【嵌入式学习笔记】---- OLED屏幕工作原理

1 驱动芯片SSD1603简介 1.1 SSD1603芯片图 SSD1603是一款点阵显示屏控制器&#xff0c;可嵌入在屏幕中&#xff0c;用于执行接收数据、显示存储、扫描刷新等任务驱动接口&#xff1a;128个SEG引脚和64个COM引脚&#xff0c;对应 128 64 128\times 64 12864像素点阵显示屏内置…

增强RAG:选择最佳的嵌入和重排模型

对于如何选择最佳的嵌入模型和重排模型&#xff0c;给出了详细的步骤和代码。 在构建检索增强生成&#xff08;RAG&#xff09;管道时&#xff0c;关键组件之一是检索器。我们有多种嵌入模型可供选择&#xff0c;包括 OpenAI、CohereAI 和开源的sentence transformers。此外&a…

排序(插入,希尔,选择,堆,冒泡,快速,归并,计数)

本文中的Swap()函数都是下面这段代码 // 交换 void Swap(int* p1, int* p2) {int tmp *p1;*p1 *p2;*p2 tmp; }文章目录 常见排序&#xff1a;一.插入排序1.直接插入排序&#xff1a;2.希尔排序&#xff1a; 二.选择排序1.选择排序&#xff1a;2.堆排序&#xff1a; 三.交换排…

C语言编译的过程

文章目录 1. 预处理&#xff08;Preprocessing&#xff09;2. 编译&#xff08;Compilation&#xff09;3. 汇编&#xff08;Assembly&#xff09;4. 链接&#xff08;Linking&#xff09;总结 c语言通过编译器直接编译成机器语言程序。 C语言程序的编译过程通常分为四个主要步…

STM32G474之TIM1输出PWM信号支持互补输出,死区时间和刹车

STM32G474之TIM1输出PWM信号&#xff0c;互补输出&#xff0c;支持死区时间和刹车。PWM第1通道输出引脚配置&#xff1a;TIM1_CH1映射到PA8,TIM1_CH1N映射到PA7&#xff0c;TIM1_BKIN映射到PA6&#xff0c;用作刹车输入信号。当刹车时&#xff0c;停止PWM波形输出。在使用“比较…

海上8km远距离无线通信模组,无人船MESH组网,飞睿WiFi助力海洋船只通信无障碍

在蔚蓝无垠的海洋世界里&#xff0c;每一次科技的进步都如同海上的灯塔&#xff0c;为我们照亮了前行的道路。今天&#xff0c;我要为大家介绍的&#xff0c;就是一款能够打破传统通信界限的模块——飞睿智能8km远距离无线通信模组。它不仅在陆地通信中展现出强大的实力&#x…

4. 第一个3D案例—创建3D场景

入门Three.js的第一步&#xff0c;就是认识场景Scene、相机Camera、渲染器Renderer三个基本概念&#xff0c;接下来&#xff0c;咱们通过三小节课&#xff0c;大家演示“第一个3D案例”完成实现过程。 学习建议&#xff1a;只要你能把第一个3D案例搞明白&#xff0c;后面学习就…

幼儿园数字化探索:从入园适应到全面启智

金秋九月&#xff0c;全国各地幼儿园迎来开学季。幼儿园门口&#xff0c;一幅幅温情与成长的画面交织在一起。针对小班幼儿普遍存在的分离焦虑问题&#xff0c;幼儿园教师团队展现出了高度的专业性和人文关怀。据上海市普陀区汇丽幼儿园叶老师介绍&#xff0c;为有效缓解这一挑…

【技术分享】顶尖 GIS 技术

谈到 GIS&#xff0c;就不能不提到现代地理智能。是指基于 GIS、遥感和卫星定位技术的地理空间可视化、分析、决策、设计和控制的技术总称。地理智能是 GIS 区别于其他信息技术最重要的价值之一。它由地理可视化、地理决策、地理设计、地理控制四个层次组成。它们形成了一个地理…

wordpress发送邮件的方法?怎么配置功能?

wordpress发送邮件设置教程&#xff1f;WordPress如何配置发信&#xff1f; WordPress作为最受欢迎的内容管理系统之一&#xff0c;被广泛用于创建和管理网站。AokSend将详细介绍WordPress发送邮件的方法&#xff0c;并指导您如何配置这一功能&#xff0c;确保您的邮件发送既高…

跑步用耳机哪款好?这五款运动骨传导耳机健身人士都说好!

在无线耳机市场持续繁荣的今天&#xff0c;入耳式耳机以其卓越的音质体验赢得了众多用户的青睐。然而&#xff0c;随着健康意识的提升&#xff0c;长时间佩戴入耳式耳机所带来的健康隐患日益受到关注。正是在这样的背景下&#xff0c;骨传导耳机凭借其独特的非入耳式设计&#…

iMeta: 南医大余光创组ggtree最新文章-系统发育树存储与可视化的数据结构

Ggtree&#xff1a;用于系统发育树及相关数据存储与可视化的数据结构 https://onlinelibrary.wiley.com/doi/10.1002/imt2.56 SHORT COMMUNICATION ● 2022年9月28日&#xff0c;南方医科大学基础医学院余光创团队在iMeta在线发表了题为“Ggtree: a serialized data object f…

UOS系统下Java执行权限问题

在程序部署中&#xff0c;出现 /bin/java 权限不足 问题&#xff0c;这个问题是由于java文件无运行权限导致&#xff0c;通过 sudo chmod ax bin/java 项目中需要展示系统当前所有运行程序窗口界面截图功能&#xff0c;这个功能在实现时通过 import 截图可获取界面图片&…

【Story】国际标准组织及其相关信息(全)

目录 1. ISO&#xff08;International Organization for Standardization&#xff09;2. IEC&#xff08;International Electrotechnical Commission&#xff09;3. ITU&#xff08;International Telecommunication Union&#xff09;4. ISO/IEC 合作标准5. IEEE&#xff08…

使用ChatGPT7小时完成高分论文写作,AI写作避坑全攻略指南

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。经过数月爆肝,终于完成学术AI使用教…

探索前沿的WebGIS开发技术:新中地教育限时福利课程免费分享

随着新学期的到来&#xff0c;新中地教育特别推出了限时免费领取课程合集活动&#xff0c;领取截止时间9月9日。为广大GIS学习者和爱好者提供一个宝贵的学习机会。此次活动旨在鼓励更多人加入到地理信息系统&#xff08;GIS&#xff09;技术的学习中来&#xff0c;掌握前沿的We…

NYNQ u-boot+kernel+rootfs.ext4的构造

其中u-boot位与NoFlash中内核和根文件系统位于emmc中 具体描述&#xff1a; 基于上表&#xff0c;在进行内存地址分配将会事半功倍。

嵌入式在线商城

一、主线功能 1、设计与实现在线商城系统涉及到前端展示、后台管理以及数据库进行查找&#xff0c;功能包含登录页面、商品搜素、商品详细信息查找。 二、页面设计 2.1、商品搜索设计 2.2、商品详细信息展示设计 2.3、TCP并发服务器设计 HTTP是基于Tcp服务器搭建起来的 第一…

【Hadoop|HDFS篇】HDFS的Shell操作

1. 基本语法 hadoop fs 具体命令或者hadoop dfs 具体命令。 两个是完全相同的。 2. 命令大全 hadoop fs&#xff1a; Usage: hadoop fs [generic options][-appendToFile <localsrc> ... <dst>][-cat [-ignoreCrc] <src> ...][-checksum <src> ..…