8

T-SQL を使用して「今年の最初の月曜日」を見つけるにはどうすればよいですか?

4

9 に答える 9

11

ngruson が投稿したリンクの例を次に示します ( http://sqlbump.blogspot.nl/2010/01/first-monday-of-year.html )。

DECLARE @Date datetime
DECLARE @Year int = 2012

SET @Date = DATEADD(YEAR, @Year - 1900, 0)

SELECT DATEADD(DAY, (@@DATEFIRST - DATEPART(WEEKDAY, @Date) + 
    (8 - @@DATEFIRST) * 2) % 7, @Date)

上記は以下を返します。

2012-01-02 00:00:00.000
于 2012-11-23T09:07:26.703 に答える
3
    Here, 
    1) DATEPART function for finding day of week. 
Here 1=sunday,2=monday,..,7=saturday.
    2) first find out is 2(monday) in case when
 condition then get same date,
    3) if is sunday(1) then add 1 day and get next
 day date is for monday,
    4) if is not 2(monday) and greater then 2 then find 
difference between lastday(7) and add 2 days ,
 so we reach to monday date.

    Here are you change year in @year variable. Ex:

        DECLARE @Date datetime
        DECLARE @Year int = 2012

        set @Date= convert(varchar(4),@Year) + '-01-01'
        select @Date,(case when DATEPART(DW,@Date)=2 then @Date
                     when DATEPART(DW,@Date)=1 then DATEADD(day,1,@Date)
                     else DATEADD(day,7-DATEPART(DW,@Date)+2,@Date)
                      end) as MondayDateis
于 2012-11-23T09:42:41.120 に答える
2

エレガントではありません;)

    DECLARE @year DATETIME = '01 jan 2012'

    SELECT [Day] 
    FROM
        (
            SELECT @year [Day] UNION ALL
            SELECT DATEADD(DAY, 1, @year) UNION ALL
            SELECT DATEADD(DAY, 2, @year) UNION ALL
            SELECT DATEADD(DAY, 3, @year) UNION ALL
            SELECT DATEADD(DAY, 4, @year) UNION ALL
            SELECT DATEADD(DAY, 5, @year) UNION ALL
            SELECT DATEADD(DAY, 6, @year)
        ) x
    WHERE
        DATENAME(DW, [Day]) = 'Monday'
于 2012-11-23T09:14:34.470 に答える
1

これを実現するための 1 つの例を次に示します。

http://sqlbump.blogspot.nl/2010/01/first-monday-of-year.html

于 2012-11-23T09:06:40.803 に答える
0

一部のデータを週ごとにグループ化し、各週の最初の日 (私の場合は日曜日) を表示する必要がありました。以下を使用して年の最初の日曜日を計算しました。次に、週番号を使用して、特定の日付が発生した週の開始を取得できます。

DECLARE @firstSundayThisYear DATE,
    @jan1ThisYear DATE,
    @currentYear INT;

SELECT @jan1ThisYear = '01-jan-' + CAST(DATEPART(YEAR, GETDATE()) AS VARCHAR(4)),
    @currentYear = DATEPART(YEAR, GETDATE());

SET @firstSundayThisYear = DATEADD(DAY, -DATEPART(weekday, @jan1ThisYear) + 1, @jan1ThisYear);

PRINT @firstSundayThisYear

注: @firstSundayThisYear は、実際には昨年の日付である可能性がありますが、週数を掛けるとすべてうまくいきます。

于 2014-01-24T19:13:57.700 に答える