首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从sql server 2008中的日期开始获取月份的周数

如何从sql server 2008中的日期开始获取月份的周数
EN

Stack Overflow用户
提问于 2012-10-29 05:17:28
回答 24查看 251K关注 0票数 42

在microsoft服务器中的SQL语句中,有一个内置函数来获取周号,但它是一年中的一周。

代码语言:javascript
复制
Select DatePart(week, '2012/11/30') // **returns 48**

返回值48是一年中的周数。

我想得到的不是48,而是1、2、3或4 (月周数)。我认为这个月的周数可以通过这个星期的月数模块来实现。例如:

代码语言:javascript
复制
Select DATEPART(week, '2012/11/30')%MONTH('2012/11/30')

但是我想知道在MS中是否还有其他内置函数可以获得本月的WeekNumber。

EN

回答 24

Stack Overflow用户

回答已采纳

发布于 2012-10-29 10:35:40

这里有两种不同的方式,两种方式都是假设周从星期一开始

如果您想要周全,所以它们属于它们开始的月份:因此,周六2012-09-01和星期日2012-09-02是第4周,而2012-09-03是第1周,请使用以下命令:

代码语言:javascript
复制
DECLARE @date date = '2012-09-01'
SELECT (day(datediff(d,0,@date)/7*7)-1)/7+1

如果您的周数减少,那么2012-09-01星期六和2012-09-02星期日是第一周,而2012-09-03是第二周,请使用以下命令:

代码语言:javascript
复制
DECLARE @date date = '2012-09-01'
SELECT 
  datediff(ww,datediff(d,0,dateadd(m,datediff(m,7,@date),0)
    )/7*7,dateadd(d,-1,@date))+1

我收到杰拉尔德的一封电子邮件。他指出了第二种方法的一个缺陷。这个应该现在就解决。

我收到了本·威尔金斯的一封邮件。他指出了第一种方法的一个缺陷。这个应该现在就解决。

票数 66
EN

Stack Overflow用户

发布于 2013-08-06 05:20:35

代码语言:javascript
复制
DECLARE @DATE DATETIME
SET @DATE = '2013-08-04'

SELECT DATEPART(WEEK, @DATE)  -
    DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,@DATE), 0))+ 1 AS WEEK_OF_MONTH
票数 13
EN

Stack Overflow用户

发布于 2012-10-29 06:56:58

没有内置功能。这取决于你每月每周的意思。你可能指的是前七天(第一周),第二天(第二周),等等。在这种情况下,只是

(DATEPART(day,@Date)-1)/7 + 1

如果要使用与DATEPART( week,)相同的周编号,则可以使用月份第一个星期数与所述日期(+1)之间的差异:

(DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) + 1

或者,你可能需要其他的东西,这取决于你所指的周数。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13116222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档