2011-02-07 116 views
6

我想计算一个月的周数,我想计算一下它的周数是否在奇数或偶数周我怎样才能在TSQL中得到这个? 谢谢大家!TSQL计算月份的月份数

+2

列表中的一些样本日期和预期产出 – RichardTheKiwi 2011-02-07 23:44:54

回答

6

这给你的日起一个月内@dt的一周。有一个使用CASE语句上的表达,显示无论是“奇”或“偶”第2个栏

declare @dt datetime 
set @dt = GETDATE() 

select 
    WhichWeekOfMonth = datepart(wk, @dt) 
        - datepart(wk,dateadd(m, DATEDIFF(M, 0, @dt), 0)) + 1, 
    case when (datepart(wk, @dt) 
      - datepart(wk,dateadd(m, DATEDIFF(M, 0, @dt), 0)) + 1) % 2 = 1 
     then 'Odd' else 'Even' end 
0

试试这个:

SELECT (DATEPART(d, '02/07/2011')/7)%2 AS WeekNo, --Replace your date column in place of '02/07/2011' 
     CASE (DATEPART(d, '02/07/2011')/7)%2 
       WHEN 1 THEN 'Odd' 
       ELSE 'Even' 
      END AS WeekType 
+0

给出了错误的答案(按我的定义 - 见我答案) - 它表示它在第1周 – RichardTheKiwi 2011-02-07 23:47:42

+0

上面的查询给出了给定的日期是一周中哪一周是偶数周还是奇数周... – Chandu 2011-02-07 23:49:13

4

它会给你一周号每个月

declare @dates datetime 
select @dates='2011-03-22' 
SELECT datepart(dd,@dates), ceiling (cast(datepart(dd,@dates)as numeric(38,8))/7) 
3

怎么样东西可读,轻松定制和可预测...

DECLARE @dayOfMonth AS INT; 
SET @dayOfMonth = DATEPART(DAY, '3/14/2013'); 
SELECT CASE 
    WHEN @dayOfMonth < 8 THEN 1 
    WHEN @dayOfMonth < 15 THEN 2 
    WHEN @dayOfMonth < 22 THEN 3 
    ELSE 4 
END AS weekOfMonth; 
0

我认为这使得该方法非常明显:

DECLARE @DayOne DATETIME 
DECLARE @ThisDay DATETIME 
SET @ThisDay = GETDATE() 
SET @DayOne = CAST(CAST(MONTH(@ThisDay) AS VARCHAR) + '/1/' + CAST(YEAR(@ThisDay) AS VARCHAR) AS DATETIME) 
SELECT (DATEPART(wk, @ThisDay) - DATEPART(wk, @DayOne) + 1) AS [Week Of Month] 

SQL Server 2012中有一个可以用于更容易建立DayOne字符串CONCAT功能:

DECLARE @DayOne DATETIME 
DECLARE @ThisDay DATETIME 
SET @ThisDay = GETDATE() 
SET @DayOne = CAST(CONCAT(MONTH(@ThisDay), '/1/', YEAR(@ThisDay)) AS DATETIME) 
SELECT (DATEPART(wk, @ThisDay) - DATEPART(wk, @DayOne) + 1) AS [Week Of Month]