1

SQL Server は、1 月 1 日を除く 2011 年の最初の週を 53 週と表示しており、1 週目である必要があります。

以下は、クエリと出力です。

declare @T table (dt datetime)
insert into @T values
('2010-12-26'),
('2010-12-27'),
('2010-12-28'),
('2010-12-29'),
('2010-12-30'),
('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,DATEPART(wk,dt) from @T

出力:

2010-12-26 00:00:00.000 53
2010-12-27 00:00:00.000 53
2010-12-28 00:00:00.000 53
2010-12-29 00:00:00.000 53
2010-12-30 00:00:00.000 53
2010-12-31 00:00:00.000 53
2011-01-01 00:00:00.000 1
2011-01-02 00:00:00.000 2
2011-01-03 00:00:00.000 2
2011-01-04 00:00:00.000 2
2011-01-05 00:00:00.000 2
2011-01-06 00:00:00.000 2
2011-01-07 00:00:00.000 2
2011-01-08 00:00:00.000 2

SQL Server で 12 月 26 日から 1 月 1 日までの第 1 週を表示したいと考えています。これを達成する方法を知っている人はいますか?

ありがとう、よろしく、アシュウィン。

4

4 に答える 4

1

最初に思っていたよりもずっと大変でした。昨年末と比較して、新年の一部になる資格があるかどうかを確認しています。そうであれば、週を 1 に設定します。それ以外の場合は、通常の週を使用します。

declare @T table (dt datetime) 
insert into @T values 
('2010-12-25'), 
('2010-12-26'), 
('2010-12-27'), 
('2010-12-28'), 
('2010-12-29'), 
('2010-12-30'), 
('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'), 
('2011-12-31'),
('2012-01-01')

select dt, 
week = case when dt + 6 - datediff(day, -1, dt) % 7 = dateadd(year, datediff(year,-1, dt), 0)
then 1 else datepart(week, dt) end from @t

証拠:

https://data.stackexchange.com/stackoverflow/q/110527/

于 2011-08-26T08:45:16.493 に答える
0

現在の年の合計週数を取得する別の方法:

DECLARE @LASTDAY DATETIME
DECLARE @weeks INT
SET @LASTDAY = DATEADD(ms,-3,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0)))
SELECT @weeks = CASE DATEname(dw,@LASTDAY)

    WHEN 'MONDAY' THEN DATEPART(WK, DATEADD(wk,DATEDIFF(wk,7,@LASTDAY),5))
    WHEN 'TUESDAY' THEN DATEPART(WK, DATEADD(wk,DATEDIFF(wk,7,@LASTDAY),5))
    WHEN 'WEDNESDAY' THEN DATEPART(WK, DATEADD(wk,DATEDIFF(wk,7,@LASTDAY),5))
    ELSE DATEPART(WK, @LASTDAY)
END
select @weeks
于 2013-08-02T09:58:16.653 に答える
0

それがすべての年に当てはまるかどうかはわかりませんが(そのように見えます) 、 CASEステートメントを使用してこれを解決できます.

SELECT  dt
        , CASE  WHEN DATEPART(wk, dt) <> 53 
                THEN DATEPART(wk, dt) 
                ELSE 1 
          END  
FROM    @T

新しいISO_WEEK datepart は、要求された出力には適用されません。

于 2011-08-26T08:45:12.350 に答える