TSQL Рассчитать номер недели месяца - PullRequest
6 голосов
/ 08 февраля 2011

Я хочу рассчитать номер недели месяца, я хочу рассчитать номер недели, будь то нечетная или четная неделя. Как я могу получить это в TSQL?Спасибо всем!

Ответы [ 5 ]

7 голосов
/ 08 февраля 2011

Это дает вам неделю даты @dt в ее месяце. Есть 2-й столбец, который использует выражение CASE над выражением, чтобы показать «нечетное» или «четное»

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
4 голосов
/ 24 марта 2011

Это даст вам номер недели на каждый месяц

declare @dates datetime
select @dates='2011-03-22'
SELECT datepart(dd,@dates), ceiling (cast(datepart(dd,@dates)as numeric(38,8))/7)  
3 голосов
/ 23 марта 2013

Как насчет чего-то читаемого , легко настраиваемого и предсказуемого ...

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 голосов
/ 30 июля 2014

Я думаю, что это делает подход очень очевидным:

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 есть функция CONCAT, которую можно использовать для более простого построения строки 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]
0 голосов
/ 08 февраля 2011

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...