我们经常碰到需要查询时间段内的数据,以下函数能有所有帮助,

有了这个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 时间段分隔,时间段查询,查询时间段内的数据相关推荐

  1. mysql 近几天内_MYSQL查询一周内的数据(最近7天的)

    select * from wap_content where week(created_at) = week(now) 如果你要严格要求是某一年的,那可以这样 查询一天: select * from ...

  2. 获取当天日期的前一天或前几天,查询一天内的数据

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//① Calendar ca = Calenda ...

  3. [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题

    前言 今天又遇到很坑的问题了,因为外国友人每一周的起始日期是周日,跟我们的不一样,我们每一周的起始日期是星期一,这样导致我要用mysql统计一周的数据的时候,对于我们来说,查询的记录包括:上周日的记录 ...

  4. oracle多边形经纬范围筛选_Oracle根据经纬度查询一定范围内的数据

    指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据. 经度:23.33 纬度:34.66 范围:2000km SA_LONGITUDE为数据表经度字段 SA_LATITUD ...

  5. SQL查询某时间范围内的数据

    MySQL数据库查询时间段的两种方法: 1.SELECT id FROM m_question WHERE cratedate BETWEEN TO_DAYS('2018-05-31 12:00:00 ...

  6. mysql查询5分钟内的数据

    查询sql语句: select * from tb_log where createtime>=DATE_SUB(NOW(),INTERVAL 5 MINUTE); DATE函数扩展: 函数 描 ...

  7. SQL——查询某时间范围内的数据

    1.BETWEEN SELECT id FROM m_question WHERE cratedate BETWEEN TO_DAYS('2019-05-31 00:00:00') and TO_DA ...

  8. MySQL 查询指定时间范围内的数据

    说明 mysql 比较时间范围可以直接用 >=.<= 等比较运算符,也可以用 between and(两边都包含,都是闭区间):比较运算符更常用,因为 between and 能做的比较运 ...

  9. oracle查询一小时内数据,ORACLE 查询近一天, 近半小时内的数据

    ORACLE 查询近一天, 近半小时内的数据 SELECT 字段 FROM 表名 WHERE 时间字段 BETWEEN SYSDATE-1 AND SYSDATE; // 查询一天内的数据 sysda ...

最新文章

  1. 学习OpenCV——粒子滤波(网上两篇文章总结)
  2. 第一次上课:特征值特征向量的几何直观
  3. js输出一个菱形_Webpack 4入口、输出和ES6模块
  4. Mybatis源码解析-sql执行
  5. pycharm中无法import已经安装的ros中的库
  6. 1034. 二哥的金链
  7. 洛谷 P1969 积木大赛 —— 水题
  8. ROS学习笔记十二:使用roswtf
  9. 漏洞10年深藏不露,PHP 项目依赖关系管理工具Composer安全吗?
  10. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
  11. 100个WordPress常用插件精选
  12. api wke_好用的wke浏览器代码,兼容chrome
  13. python如何合并txt文件_Python实现将目录中TXT合并成一个大TXT文件的方法
  14. Android 开发框架xUtils3
  15. python绘制坐标系_借助Python Turtle,了解计算机绘图的坐标系
  16. Mword单词记忆小助手
  17. 微信公众平台如何审核
  18. golang使用gomonkey和monkey来mock方法或者函数时报panic: permission denied [recovered]
  19. 多目标优化 MOP (三):遗传算法 SPEA2+SDE 2014
  20. aria2+ariang+nginx linux 离线下载部署

热门文章

  1. Linux环境 网络流量统计/proc/net/dev和/proc/net/snmp
  2. flowable工作流技术学习
  3. 微信开发者工具未绑定企业号开发者
  4. js文件中引入js的方法
  5. 2022-2028年中国银行IT行业市场发展前景及投资风险评估报告
  6. 放弃Notepad++,替代品很多
  7. 怎样学习jQuery,jQuery学习教程
  8. python电话号码_Python有效电话号码
  9. InvokeRequired and Invoke
  10. android adb shell杀进程