SQLServer 时间段分隔,时间段查询,查询时间段内的数据
我们经常碰到需要查询时间段内的数据,以下函数能有所有帮助,
有了这个table后可以将需要分段查询的数据left join 关联该表,
然后就可以分组求和了,具体如何使用得看大家的情景
将一天的时间进行时间段分隔,效果如下
--这是一个写好的函数,复制代码执行就好,调用方式:SELECT * FROM dbo.fun_getDateTimeSpacing('', 120)
函数代码如下
ALTER FUNCTION [dbo].fun_getDateTimeSpacing(@DateTime VARCHAR(25) = '2019-12-19 11:16:41' ,--时间,默认为当前系统时间@minute INT = 60 --间断分钟数 建议值:15,20,30,60,120,不能低于15分钟)
RETURNS TABLE
AS RETURN(
WITH tbSourceAS ( SELECT DATEADD(DAY, 0, DATEDIFF(DAY, 0, CASE WHEN ISNULL(@DateTime,'')='' THEN GETDATE()ELSE @DateTime END )) _timeUNION ALLSELECT DATEADD(MINUTE, @minute, a.[_time]) _timeFROM tbSource aWHERE a.[_time] < DATEADD(MINUTE, -@minute, DATEADD(DAY, 0, DATEDIFF(DAY, -1, CASE WHEN ISNULL(@DateTime,'')='' THEN GETDATE()ELSE @DateTime END)))),tbTimeAS ( SELECT ROW_NUMBER() OVER ( ORDER BY a.[_time] ) _row , * FROM tbSource aUNION ALLSELECT ( SELECT COUNT(1) FROM tbSource ) + 1 _row , DATEADD(DAY, 1, DATEDIFF(DAY, 0, CASE WHEN ISNULL(@DateTime,'')='' THEN GETDATE()ELSE @DateTime END)) _time)SELECT a.[_row],CONVERT(VARCHAR(19), a.[_time], 121) startTime ,CONVERT(VARCHAR(19), b.[_time], 121) endTimeFROM tbTime aLEFT JOIN tbTime b ON b.[_row] = a.[_row] + 1WHERE ISNULL(b.[_time], '') > ''
)
--获取1900年1月1日零点整
SELECT DATEADD(DAY, 0, 0)
--获取当前与1900年1月1日零点整相差多少天
SELECT DATEDIFF(DAY, 0, GETDATE())
--在1900年1月1日0点的基础上增加以上天数(得当前日期的零点整)
SELECT DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))
--获取短时间字符串
SELECT CONVERT(VARCHAR(8), GETDATE(), 14)
SQLServer 时间段分隔,时间段查询,查询时间段内的数据相关推荐
- mysql 近几天内_MYSQL查询一周内的数据(最近7天的)
select * from wap_content where week(created_at) = week(now) 如果你要严格要求是某一年的,那可以这样 查询一天: select * from ...
- 获取当天日期的前一天或前几天,查询一天内的数据
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//① Calendar ca = Calenda ...
- [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题
前言 今天又遇到很坑的问题了,因为外国友人每一周的起始日期是周日,跟我们的不一样,我们每一周的起始日期是星期一,这样导致我要用mysql统计一周的数据的时候,对于我们来说,查询的记录包括:上周日的记录 ...
- oracle多边形经纬范围筛选_Oracle根据经纬度查询一定范围内的数据
指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据. 经度:23.33 纬度:34.66 范围:2000km SA_LONGITUDE为数据表经度字段 SA_LATITUD ...
- SQL查询某时间范围内的数据
MySQL数据库查询时间段的两种方法: 1.SELECT id FROM m_question WHERE cratedate BETWEEN TO_DAYS('2018-05-31 12:00:00 ...
- mysql查询5分钟内的数据
查询sql语句: select * from tb_log where createtime>=DATE_SUB(NOW(),INTERVAL 5 MINUTE); DATE函数扩展: 函数 描 ...
- SQL——查询某时间范围内的数据
1.BETWEEN SELECT id FROM m_question WHERE cratedate BETWEEN TO_DAYS('2019-05-31 00:00:00') and TO_DA ...
- MySQL 查询指定时间范围内的数据
说明 mysql 比较时间范围可以直接用 >=.<= 等比较运算符,也可以用 between and(两边都包含,都是闭区间):比较运算符更常用,因为 between and 能做的比较运 ...
- oracle查询一小时内数据,ORACLE 查询近一天, 近半小时内的数据
ORACLE 查询近一天, 近半小时内的数据 SELECT 字段 FROM 表名 WHERE 时间字段 BETWEEN SYSDATE-1 AND SYSDATE; // 查询一天内的数据 sysda ...
最新文章
- 学习OpenCV——粒子滤波(网上两篇文章总结)
- 第一次上课:特征值特征向量的几何直观
- js输出一个菱形_Webpack 4入口、输出和ES6模块
- Mybatis源码解析-sql执行
- pycharm中无法import已经安装的ros中的库
- 1034. 二哥的金链
- 洛谷 P1969 积木大赛 —— 水题
- ROS学习笔记十二:使用roswtf
- 漏洞10年深藏不露,PHP 项目依赖关系管理工具Composer安全吗?
- 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
- 100个WordPress常用插件精选
- api wke_好用的wke浏览器代码,兼容chrome
- python如何合并txt文件_Python实现将目录中TXT合并成一个大TXT文件的方法
- Android 开发框架xUtils3
- python绘制坐标系_借助Python Turtle,了解计算机绘图的坐标系
- Mword单词记忆小助手
- 微信公众平台如何审核
- golang使用gomonkey和monkey来mock方法或者函数时报panic: permission denied [recovered]
- 多目标优化 MOP (三):遗传算法 SPEA2+SDE 2014
- aria2+ariang+nginx linux 离线下载部署