2011-03-03 9 views
1

주는 날짜의 주 번호를 알아야합니다. 예를 들면, 1 월 1 일 = 1 주일은 1 월 1 일 - 2 주일은 2 ..이 중 하나는 pls를 도와줍니다.SQL Server 날짜 기능

+0

체크 [FiscalWeek (http://www.sqlteam.com/article/returning-a-week-number-for-any-given-date-and-starting -fiscal-month) 기능이 링크 된 [페이지] (http://www.sqlteam.com/article/returning-a-week-number-for-any-given-date-and-starting-fiscal-month)에서 작동합니다. –

답변

5

당신은 이런 식으로 뭔가를 시도해야합니다 :

DECLARE @Dt datetime 
SELECT @Dt='02-21-2008' 
SELECT DATEPART(wk, @Dt) 

이 원하는 weeknumbers를 반환해야합니다.

SQL Server는 1 월 1 일부터 계산을 시작합니다. ISO weeknumbers를 반환하려면 좀 더 스크립팅을해야합니다. 로빈의 의견에 대응 DATEPART (Transact-SQL)

: http://www.rmjcs.com/SQLServer/TSQLFunctions/ISOWeekNumber/tabid/207/Default.aspx

MSDN을 : 좋은 하우투이 사이트에 나와있는

하지만 난, 같은 방법으로 필요로하는 1월 1일 에서 7 , 1 월 8 일부터 17 일까지 1을 반환해야합니다.이 숫자는 과 같습니다. 내 인상을 받았습니다.

그런 경우 다음과 같이 작성할 수도 있습니다.

select (datepart(dy, '2011-01-01')/7) + 1 
--returns 1 
select (datepart(dy, '2011-01-02')/7) + 1 
--returns 1 
select (datepart(dy, '2011-12-31')/7) + 1 
--returns 53 

나는 나는 단지 순간에 사용할 수있는 SQL 2005 인스턴스를 가지고로 SQL 서버 2008는 iso_weekwk 매개 변수로 응답 방법을 모르겠어요.

+0

'datepart (iso_week, @dt)'는 링크에서'udf_GetISOWeekNumberFromDate'와 동일합니다. –

+0

이것은 작동하지만, 나는 이런 식으로 필요 없다. 2011 년 1 월 1 일을 통과하면 1을 반환하고, 2011 년 2 월에는 2를 반환합니다. 하지만 그런 식으로, 1 월 7 일부터, 그것은 1 월 8 일에서 17 일까지 2를 반환해야합니다 .. 내 인상을 가지고 희망을 가져야한다. –

+0

@Mikael 고마워, 그거에 대해 몰랐어. . SQL Server 2008 이후 구현 된 것을 볼 수 있습니다. –

1

원하는대로 할 수 있습니까?

declare @T table (dt datetime) 
insert into @T values 
('2010-12-31'), 
('2011-01-01'), 
('2011-01-02'), 
('2011-01-03'), 
('2011-01-04'), 
('2011-01-05'), 
('2011-01-06'), 
('2011-01-07'), 
('2011-01-08') 

select 
    dt, 
    (datediff(d, dateadd(year, datediff(year, 0, dt), 0), dt)/7)+1 
from @T 

결과

dt      
----------------------- ----------- 
2010-12-31 00:00:00.000 53 
2011-01-01 00:00:00.000 1 
2011-01-02 00:00:00.000 1 
2011-01-03 00:00:00.000 1 
2011-01-04 00:00:00.000 1 
2011-01-05 00:00:00.000 1 
2011-01-06 00:00:00.000 1 
2011-01-07 00:00:00.000 1 
2011-01-08 00:00:00.000 2