excel以周为单位计算指定日期为第一周_sql查询当前时间前一天的数据

excel以周为单位计算指定日期为第一周_sql查询当前时间前一天的数据业务上有需求要按周五作为一周的第一天算周别,所以就研究了一个SQL Server算法。 备注:1月1号一定是第一周的开始,且到周设定的最后一天作为第一周的最后一天。WEEKDAY为SQL默认的周天为每

[SQL Server]按照设定的周别的第一天算任意一天的周别

业务上有需求要按周五作为一周的第一天算周别,所以就研究了一个SQL Server算法。

备注:1月1号一定是第一周的开始,且到周设定的最后一天作为第一周的最后一天。WEEKDAY为SQL默认的周天为每周第一天

例如:周五当周别第一天,1月1号是周三,那么第一周的就是1月1号-1月2号,1月3号算第二周

特别说明:虽然我个人测试过多种情况,但是还是请大家使用的时候注意做好测试验证,出现算法错误引发的后果,本人概不负责

注意事项:有类似的需求的时候,千万不要使用SQL自带的功能SET DATEFIRST来调整SQL默认的周别第一天,这个是全局设置,调整后之前数据库中已经存在算法可能就全错了

算法

--@i代表周几当第一天,@d代表需要判断周别的日期
DECLARE @i INT=1,@d DATETIME="2022-01-03"
DECLARE @diff INT=DATEPART(WEEKDAY,DATENAME(YEAR,@d)+"-01-01")-(@i+1)
SELECT 
    CASE WHEN @diff IN (0)
        THEN DATEDIFF(DAY,DATENAME(YEAR,@d)+"-01-01",@d)/7+1
    WHEN @diff IN (-1,-2,-3,-4,-5,-6,-7)
        THEN CASE WHEN DATEDIFF(DAY,DATEADD(DAY,ABS(@diff),DATENAME(YEAR,@d)+"-01-01"),@d)<0 
                     THEN DATEDIFF(DAY,DATEADD(DAY,ABS(@diff),DATENAME(YEAR,@d)+"-01-01"),@d)/7+1 
                 ELSE DATEDIFF(DAY,DATEADD(DAY,ABS(@diff),DATENAME(YEAR,@d)+"-01-01"),@d)/7+1+1 
             END
    WHEN @diff IN (1,2,3,4,5,6,7)
        THEN CASE WHEN DATEDIFF(DAY,DATEADD(DAY,7-@diff,DATENAME(YEAR,@d)+"-01-01"),@d)<0
                     THEN DATEDIFF(DAY,DATEADD(DAY,7-@diff,DATENAME(YEAR,@d)+"-01-01"),@d)/7+1
                 ELSE DATEDIFF(DAY,DATEADD(DAY,7-@diff,DATENAME(YEAR,@d)+"-01-01"),@d)/7+1+1
             END
    END

 

 

思路:

excel以周为单位计算指定日期为第一周_sql查询当前时间前一天的数据

 

 excel以周为单位计算指定日期为第一周_sql查询当前时间前一天的数据

 

本文来自思创斯聊编程,作者:二洋 – 思创斯聊编程 (cnblogs.com),转载请注明原文链接:[SQL Server]按照设定的周别的第一天算任意一天的周别 – 二洋 – 思创斯聊编程 (cnblogs.com)

本文版权归作者和思创斯聊编程共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利

原文地址:https://www.cnblogs.com/stupidsheep/archive/2022/09/23/16722618.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4733.html

(0)
上一篇 2023-06-07
下一篇 2023-06-07

相关推荐

  • Python sys args用法及示例

    Python sys args用法及示例在Python开发中,我们经常需要从命令行获取参数来执行不同的操作。这个时候就需要使用sys模块中的args参数来获取命令行参数,以便根据参数来执行相应的操作。本文将深入探讨Python中sys args的用法及示例。

    2024-04-08
    76
  • Ubuntu如何卸载Python 3

    Ubuntu如何卸载Python 3Python 3 是一种非常流行的编程语言,但有时您可能需要卸载它。可能是因为您需要使用其他版本的 Python 或因为您不需要 Python 3 并且想要释放磁盘空间。无论原因是什么,本文将向您展示如何在 Ubuntu 操作系统上卸载 Python 3。

    2024-08-12
    25
  • 数据库分库分表思路「建议收藏」

    数据库分库分表思路「建议收藏」一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下…

    2023-02-02
    137
  • Python列表:快速删除元素的方法

    Python列表:快速删除元素的方法运行结果:

    2023-12-08
    117
  • 以Pycharm字体大小为中心的标题

    以Pycharm字体大小为中心的标题Pycharm是一个非常流行的Python开发工具,它拥有丰富的功能和插件,可以大大提高我们的开发效率。在Pycharm中,我们经常需要设定一些标题,比如函数名、模块名等等,其中一个很重要的问题就是如何让标题在代码中更加突出,从而便于我们更好地理解和阅读代码。在这篇文章中,我们将介绍如何以Pycharm字体大小为中心的标题。

    2024-08-04
    27
  • 以js截取最后一个字符串为中心的方法

    以js截取最后一个字符串为中心的方法在web开发中,我们常常需要对字符串进行处理。有时候我们需要获取一个字符串的最后几个字符,甚至想把字符串最后一部分截成两部分处理。这时候,em以js截取最后一个字符串为中心的方法/em就非常有用。

    2024-06-22
    48
  • MySQL必知必会–第十九章[通俗易懂]

    MySQL必知必会–第十九章[通俗易懂]第十九章–插入数据 1。插入数据: insert into customers values(NULL, 'XXX','XXX', 'XXX&ap…

    2023-02-17
    143
  • mysql基本知识总结_MySQL进入

    mysql基本知识总结_MySQL进入MySQL基础知识02 4.CRUD 数据库CRUD语句:增(create)、删(delete)、改(update)、查(Retrieve) Insert 语句 (添加数据) Update 语句(更新

    2023-06-08
    147

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注