2011-02-07 35 views
6

Tôi muốn tính số tuần của tháng, tôi muốn tính số tuần cho dù tuần lẻ hoặc thậm chí của nó như thế nào tôi có thể nhận được điều này trong TSQL? Cảm ơn tất cả!TSQL Tính số tuần của tháng

+2

danh sách một vài cuộc hẹn mẫu và dự kiến ​​sản lượng – RichardTheKiwi

Trả lời

6

này mang đến cho bạn tuần của @dt ngày trong tháng của mình. Có một cột thứ 2 có sử dụng một câu lệnh CASE trong ngôn luận, để hiển thị hoặc là «Lẻ» hay «Chẵn»,

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

Đó là một Richard tuyệt vời. Bạn cũng có thể giúp với cách chúng tôi có thể làm ngược lại - Được cung cấp một tháng và số tuần, chúng tôi có thể nhận được ngày đầu tiên và ngày cuối cùng trong số tuần đó không? – Jinith

0

Hãy thử điều này:

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

Cung cấp cho câu trả lời sai (theo định nghĩa của tôi - xem tôi câu trả lời) - nó nói là trong tuần 1 – RichardTheKiwi

+0

Truy vấn ở trên cho biết liệu ngày tháng trong tuần là tuần thậm chí là tuần lẻ của tháng ... – Chandu

4

Nó sẽ cung cấp cho bạn Số tuần Mỗi tháng

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

Làm thế nào về một cái gì đó có thể đọc được, dễ dàng tùy chỉnh, và có thể dự đoán ...

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

tôi nghĩ rằng điều này làm cho cách tiếp cận rất rõ ràng:

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 có một chức năng CONCAT có thể được sử dụng để dễ dàng xây dựng các chuỗi DayOne:

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] 
Các vấn đề liên quan