`

转:SQL Server:获取当前日期是本月的第几周

阅读更多

原文转载链接找不着了。

以下问转载内容:

第一种:

 

--获取当前日期是本月的第几周
--测试:select dbo.getMonthWeek(getdate()) 结果:10月的第2周
CREATE function [dbo].[getMonthWeek](@d datetime)
returns varchar(20)
as
begin
declare @returns varchar(20),
              @monthfirstDay datetime,
              @firstMondy datetime

select @monthfirstDay=left(convert(varchar,@d,23),7)+'-01'

if not exists(select 1 
                     from master.dbo.spt_values
                     where type=N'P' and number between 0 and datediff(d,@monthfirstDay,@d)
                     and datepart(dw,dateadd(d,number,@monthfirstDay))=2)
begin
  select @monthfirstDay=dateadd(mm,-1,@monthfirstDay)
end

  ;with t as(select 'days'=dateadd(d,number,@monthfirstDay)
                   from master.dbo.spt_values
                   where type=N'P' and number<=7)
   select @firstMondy=min([days]) 
    from t
    where datepart(dw,[days])=2

select @returns=rtrim(datepart(mm,@monthfirstDay))+'月的第'+rtrim(datediff(d,@firstMondy,@d)/7+1)+'周'

return @returns
end

第二种:

 

 

--获取当前日期是本月的第几周
--测试:select dbo.WeekOfMonth(getDate());结果:2
CREATE   FUNCTION   [dbo].[WeekOfMonth](@day datetime)     
RETURNS int  
AS   
begin  
   
----declare @day datetime   
declare @num int  
declare @Start datetime  
declare @dd int  
declare @dayofweek char(8)  
declare @dayofweek_num char(8)  
declare @startWeekDays int  
---set @day='2009-07-05'   
if datepart(dd,@day)=1  
return 1  
else  
set @Start= (SELECT   DATEADD(mm,   DATEDIFF(mm,0,@day),   0)) --一个月第一天的   
set @dayofweek= (datename(weekday,@Start)) ---得到本月第一天是周几   
set @dayofweek_num=(select (case @dayofweek when '星期一' then 2  
when '星期二' then 3  
when '星期三' then 4  
when '星期四' then 5  
when '星期五' then 6  
when '星期六' then 7  
when '星期日' then 1  
end))  
set @dayofweek_num= 7-@dayofweek_num+1 ---得到本月的第一周一共有几天   
---print @dayofweek_num   
   set @dd=datepart(dd,@day) ----得到今天是这个月的第几天   
--print @dd   
if @dd<=@dayofweek_num --小于前一周的天数   
return 1  
else   
set @dd=@dd-@dayofweek_num  
if @dd % 7=0  
     begin  
       set @num=@dd / 7  
        return @num+1  
          
     end  
   else --if @dd % 7<>0   
      
     set @num=@dd / 7  
set @num=@num+1+1  
       return @num  
end 

 

 

分享到:
评论

相关推荐

    sqlserver 计算当月所有自然周的区间。

    根据提供的文件信息,我们可以了解到这段代码的主要目的是在SQL Server中计算出指定月份的所有自然周的起始和结束日期,并将这些信息存储在一个名为`monthWeekBetween`的表中。接下来,我们将详细解释其中的关键概念...

    SqlServer日期处理函数

    ### SqlServer 日期处理函数详解 #### 概述 SqlServer 提供了一系列强大的日期处理函数,这些函数可以帮助开发者和数据库管理员高效地操作日期和时间数据。本文档将详细介绍几个常用的日期处理函数及其应用场景,并...

    SQL Server中获取第一天、最后一天

    在SQL Server中,掌握如何获取特定时间范围的起始与结束日期是进行数据查询与分析的重要技能。本文将深入解析如何使用SQL Server内置函数来获取月份、周、年度、季度等周期的首尾日期,这对于数据报表、业务分析以及...

    请教用sql实现通过已知的年,月,第几周和周几,得到具体的日期

    在SQL中,根据已知的年、月、第几周和周几来获取具体的日期是一项常见的日期处理任务,尤其在数据分析或报表生成时非常有用。本文将深入探讨如何使用SQL来实现这一功能,并以MS SQL Server为例进行示例说明。 首先...

    SQL获取当前月的第一天和最后一天和当前月一共几天

    在第二个方法中,同样声明了一个`@FistDayOfThisMonth`变量,通过`@NOW - DAY(@NOW) + 1`来获取当前月的第一天,这个表达式将当前日期减去其日数,然后加1,就得到了每月的第一天。 ```sql DECLARE @...

    SQL日期获取技巧大全

    最后,`DATEPART()`函数可以用来获取日期中的特定部分,例如`weekday`或`week`可以获取一周中的哪一天(1-7,1为星期日),`dw`同样可以获取星期几,而`week`或`wk`则返回一年中的第几周。 通过以上SQL语句,你可以...

    sql取不同的日期

    首先通过`dateadd(mm,1,'20100414')`将当前日期加上一个月得到下个月的第一天,然后通过`day()`函数获取这一天的日期(即下个月的第一天是几号)。最后,通过减去当前日期的天数`day('20100414')`来计算出本月的总...

    SQL Server 2000下日期操作的实用范例

    使用`DATENAME`函数,配合`weekday`间隔类型,可以返回当前日期是星期几的名称。 了解这些范例后,你可以在实际工作中灵活运用,处理各种日期相关的查询和计算,提高SQL Server 2000中的数据处理效率。记住,这些...

    sql server 时间查询

    获取当前日期和时间 **语法:** ```sql SELECT 当前日期 = CONVERT(varchar(10), GETDATE(), 120), 当前时间 = CONVERT(varchar(8), GETDATE(), 114); ``` **解释:** - `CONVERT` 函数用于转换数据类型。 - `...

    SQL Server日期加减函数DATEDIFF与DATEADD用法分析

    这是因为DATEDIFF(YEAR, 0, GETDATE())计算了当前日期与1900年1月1日之间的年数差,然后DATEADD将这个差值应用到1900年的开始日期,得到当年的第一天。 接下来,我们看几个使用DATEDIFF和DATEADD进行日期计算的例子...

    sql第四章理论上机答案

    - **知识点解析**:此查询用于找出生日与当前日期相同的用户。 #### 16. 替换帖子标题和内容中的特殊字符 - **SQL语句**: ```sql UPDATE BBSTopic SET TTopic = REPLACE(REPLACE(TTopic, ', '*'), '&gt;', '*'); ...

    使用sql语句查询的数据按时间递增累加

    目标是使用SQL语句计算出每个源ID (`ܺķ`) 在不同时期的累计预计值 (`ۼԤ`),即从最早的时间点开始到当前时间点的所有预计值之和。 #### 2.2 SQL实现 接下来,我们将展示具体的SQL查询语句,以实现上述目标: ``...

    2019年节假日sql数据

    根据给定的信息,我们可以了解到这份文档是关于2019年节假日SQL数据的创建与插入操作,主要涉及到了具体的节假日日期、类型等信息。接下来,我们将深入解析标题、描述及部分代码内容中的关键知识点。 ### SQL表结构...

    SQL+SERVER精华查询语句(最新完整版).pdf

    根据提供的文件信息,我们可以归纳出一系列SQL Server查询技巧与应用场景,这些内容对于学习或使用SQL Server进行数据库管理的人员来说非常实用。以下是对文件中提到的几个查询问题的详细解析: ### 第一题:设计...

    SQL语句计算两个日期之间有多少个工作日的方法

    首先,我们注意到在SQL中可以使用`DATEPART`函数来获取日期的组成部分,例如`dw`参数可以用来获取日期是一周中的第几天。`@begdt`和`@enddt`分别代表开始日期和结束日期。 计算方法分为两种情况: 1. 如果两个日期...

    12个用一条语句写成的有关日期函数

    在SQL SERVER和ASE数据库系统中,日期处理是常见的任务,特别是在数据分析、报表生成以及业务逻辑中。以下是一些用单条语句实现的日期函数,它们可以帮助你更高效地进行日期相关的计算和转换。 1. 生肖函数: 这个...

    PB用一条语句写成的有关日期函数(生肖、天干地支、星座、闰年等).doc

    在PowerBuilder(PB)编程环境中,我们可以利用单条语句来实现一些常见的日期处理功能,如获取生肖、天干地支、星座以及判断闰年等。以下是对这些语句的详细解释: 1. 生肖计算: ```pb mid(fill('鼠牛虎兔龙蛇马...

    学习的一些总结c#

    - 获取本月第一天和最后一天,可以使用`DATEFROMPARTS()`函数(对于SQL Server 2012及以上版本)或者`DATEADD()`和`EOMONTH()`函数组合。 5. **访问权限**: - 在C#中,访问修饰符如`protected`用于定义类成员的...

    Delphi常见问题.docx

    例如,为了获取当前月份的第一天与最后一天,我们可以使用 `StartOfTheMonth` 和 `EndOfTheMonth` 这两个函数。 **代码示例**: ```pascal uses DateUtils; var FirstDay, LastDay: TDateTime; begin FirstDay...

    管制员智能排班系统设计.pdf

    系统界面是智能排班系统的用户界面,需要简单易用、美观大方,能够帮助管制员快速查询、预览、打印本月或下几个月值班表。 四、智能排班系统的实现 智能排班系统的实现需要经过多个步骤,包括需求分析、系统设计、...

Global site tag (gtag.js) - Google Analytics