4

今週の月曜日と日曜日の日付を取得する必要があります。

この ATM を取得しましたが、現在の日付を同じ月曜日に設定すると、正しい結果が得られません。

DECLARE @date datetime
set @date = '2013-09-01 11:15:51'


    SELECT DATEADD(day,
                   -1 - (DATEPART(dw, CONVERT (date, @date)) + @@DATEFIRST -2) % 7,
                   CONVERT (date, @date)
           ) AS ThisModay, 
           DATEADD(day, 6, CONVERT (date, @date)) as NextSunday 

それを試みると、月曜日として2013-08-25になりますが、2013-09-01になるはずです

これどうやってするの ?、現在の週を常に結果として表示します。(現在の日付は常に 2 つの結果と同じか、2 つの結果の間にある必要があります)

4

5 に答える 5

2

試す

SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),7) 

日曜日に

     SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0)

月曜日に

デフォルトでは、週の最初の曜日は月曜日で、0 から始まります。

于 2013-09-03T10:10:32.593 に答える
1

私の以前の答えは間違っていました、ここに訂正があります

DECLARE @date datetime
declare @wd int
set @date = '2013-09-06 11:15:51'

set @wd = case when datepart(weekday,@date)<2 then 7-datepart(weekday,@date) else     datepart(weekday,@date)-2 end

select DATEADD(day, -@wd,@date) As Monday,
                DATEADD(day, 6-@wd,@date) As Sunday
于 2013-09-03T09:54:17.560 に答える
0

宣言コードの前に:

    set @@DATEFIRST = 1

デフォルトでは 7 で、週の最初が Sunday であることを意味します。1 に等しいと置くと、最初の日は月曜日になります。

于 2013-09-03T09:47:09.080 に答える
0

私のバージョン:

DECLARE @date datetime = '2013-08-31 11:15:51'
DECLARE @Monday INT = 2
DECLARE @NextSunday INT = 8

SELECT 
DATEADD(day, (@Monday - DATEPART(dw, @date)), @date) AS ThisMonday
, DATEADD(day, (@NextSunday - DATEPART(dw, @date)), @date) AS NextSunday 

ここでテスト用のSQL Fiddle

于 2013-09-03T10:20:22.100 に答える
0

フォローしてみてください

実際にはSET DATEFIRSTは必要ありませんが、これは予防のためだけです

SET DATEFIRST 7;
DECLARE @date datetime
set @date = '2013-09-11 11:15:51'


    SELECT cast(DATEADD(wk, DATEDIFF(wk, 0, @date), 0) as DATE) AS ThisModay, 
           DATEADD(day, 6, CONVERT (date, @date)) as NextSunday 
于 2013-09-03T10:13:48.590 に答える