在Microsoft SQL Server的SQL语句,还有一个内置的函数来获取星期数,但它是一年中的一周。
Select DatePart(week, '2012/11/30') // **returns 48**
返回值48是一年中的周数。
而不是48,我想1,2,3或4(每月的周数)。 我觉得这个月的周数可以通过模块,这个星期的月份数来实现。 对于如
Select DATEPART(week, '2012/11/30')%MONTH('2012/11/30')
但我想知道是否有其他内置功能来获得一个月的WeekNumber在MS SQL SERVER。
Answer 1:
这里有两种不同的方式,两者都假定每周从星期一开始
如果你想周保持完整,所以他们属于一个月中,他们开始:所以周六2012-09-01,周日2012-08-30为4周,周一2012-09-03本周是1使用这样的:
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
如果削减monthchange您的周周六这么和2012-09-01 2012-08-30星期日是1周,周一2012-09-03本周是2使用这样的:
declare @date datetime = '2012-09-01'
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
Answer 2:
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
Answer 3:
没有内置功能。 这取决于你用一个月的一周是什么意思。 你可能意味着无论是在第7天(1周),第二7天(2周),等等。在这种情况下,它也只是
(DATEPART(day,@Date)-1)/7 + 1
如果你想使用同一个星期编号为与DATEPART(周)时,您可以使用第一个月,问题中的日期(+1)的周数之间的差异:
(DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) + 1
或者,您可能需要别的东西,这取决于你所说的周数是什么。
Answer 4:
只要看看日期,看看它的范围下降英寸
范围1-7是第一周,范围8-14是第二个星期,等
SELECT
CASE WHEN DATEPART(day,yourdate) < 8 THEN '1'
ELSE CASE WHEN DATEPART(day,yourdate) < 15 then '2'
ELSE CASE WHEN DATEPART(day,yourdate) < 22 then '3'
ELSE CASE WHEN DATEPART(day,yourdate) < 29 then '4'
ELSE '5'
END
END
END
END
Answer 5:
类似于第二溶液,更少的代码:
declare @date datetime = '2014-03-31'
SELECT DATEDIFF(week,0,@date) - (DATEDIFF(week,0,DATEADD(dd, -DAY(@date)+1, @date))-1)
Answer 6:
没有内置功能,让您的周数。 我不认为将有助于你反正是周在一个月数目不恒定。
http://msdn.microsoft.com/en-us/library/bb675168.aspx
我想你可以用4把数(48),并采取相同和项目的模块,作为该月的周数,通过添加一个到的结果。
Answer 7:
下面是获得一周的第一天和最后一天了一个月的建议:
-- Build a temp table with all the dates of the month
drop table #tmp_datesforMonth
go
declare @begDate datetime
declare @endDate datetime
set @begDate = '6/1/13'
set @endDate = '6/30/13';
WITH N(n) AS
( SELECT 0
UNION ALL
SELECT n+1
FROM N
WHERE n <= datepart(dd,@enddate)
)
SELECT DATEADD(dd,n,@BegDate) as dDate
into #tmp_datesforMonth
FROM N
WHERE MONTH(DATEADD(dd,n,@BegDate)) = MONTH(@BegDate)
--- pull results showing the weeks' dates and the week # for the month (not the week # for the current month)
select MIN(dDate) as BegOfWeek
, MAX(dDate) as EndOfWeek
, datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, dDate), 0)), 0), dDate) as WeekNumForMonth
from #tmp_datesforMonth
group by datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, dDate), 0)), 0), dDate)
order by 3, 1
Answer 8:
检查了这一点...它的工作的罚款。
declare @date as datetime = '2014-03-10'
select DATEPART(week,@date) - DATEPART(week,cast(cast(year(@date) as varchar(4))+'-' + cast(month(@date) as varchar(2)) + '-01' as datetime))+1
Answer 9:
使用DENSE_RANK函数脏,但容易一行。 性能将受到影响,但有效的没有少。
DENSE_RANK()over(Partition by Month(yourdate),Year(yourdate) Order by Datepart(week,yourdate) asc) as Week
Answer 10:
这是导致上无论周数查询startday
和endday
一周的可能。
SET DATEFIRST 2
DECLARE @FROMDATE DATE='12-JAN-2015'
-- Get the first day of month
DECLARE @ALLDATE DATE=DATEADD(month, DATEDIFF(month, 0, @FROMDATE), 0)
DECLARE @FIRSTDATE DATE
;WITH CTE as
(
-- Get all dates in that month
SELECT 1 RNO,CAST(@ALLDATE AS DATE) as DATES
UNION ALL
SELECT RNO+1, DATEADD(DAY,1,DATES )
FROM CTE
WHERE DATES < DATEADD(MONTH,1,@ALLDATE)
)
-- Retrieves the first day of week, ie, if first day of week is Tuesday, it selects first Tuesday
SELECT TOP 1 @FIRSTDATE = DATES
FROM CTE
WHERE DATEPART(W,DATES)=1
SELECT (DATEDIFF(DAY,@FIRSTDATE,@FROMDATE)/7)+1 WEEKNO
欲了解更多信息,我已经回答了以下问题。 可以检查。
Answer 11:
floor((day(@DateValue)-1)/7)+1
Answer 12:
干得好....
IM使用下面的代码..
DATEPART(WK,@DATE_INSERT) - DATEPART(WK,DATEADD(DAY,1,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@DATE_INSERT),0)))) + 1
Answer 13:
尝试下面的代码:
declare @dt datetime='2018-03-15 05:16:00.000'
IF (Select (DatePart(DAY,@dt)%7))>0
Select (DatePart(DAY,@dt)/7) +1
ELSE
Select (DatePart(DAY,@dt)/7)
Answer 14:
你可以简单地通过获取一个月的最低周数得到周数和周数中扣除。 假设你有一个日期的表
select
emp_id, dt , datepart(wk,dt) - (select min(datepart(wk,dt))
from
workdates ) + 1 from workdates
Answer 15:
解:
declare @dt datetime='2018-03-31 05:16:00.000'
IF (Select (DatePart(DAY,@dt)%7))>0
Select (DatePart(DAY,@dt)/7) +1
ELSE
Select (DatePart(DAY,@dt)/7)
Answer 16:
declare @end_date datetime = '2019-02-28';
select datepart(week, @end_date) - datepart(week, convert(datetime, substring(convert(nvarchar, convert(datetime, @end_date), 127), 1, 8) + '01')) + 1 [Week of Month];
Answer 17:
这里是经得起考验的解决方案,这个查询在任何情况下 - 就像如果每月的1日是周五,那么这也将工作 -
select (DATEPART(wk,@date_given)-DATEPART(wk,dateadd(d,1-day(@date_given),@date_given)))+1
以上是一些解决方案,这将失败,如果这个月的第一次约会是在周五,则4将是本月的第二周
Answer 18:
代码如下:
set datefirst 7
declare @dt datetime='29/04/2016 00:00:00'
select (day(@dt)+datepart(WEEKDAY,dateadd(d,-day(@dt),@dt+1)))/7
文章来源: How to get week number of the month from the date in sql server 2008