2016-03-30 21 views
2

Geçerli tarih için haftanın başlangıcını (Pazartesi) almak için bu sorguyu kullanıyorum. Tarihin ayın ilk günü ve Pazar günü olduğu zaman bozulur. Bu sorunu nasıl çözeceğinden emin değilsiniz. Herhangi bir yardım çok takdir edilecektir. Teşekkürler.Haftanın başlangıcı (Pazartesi) - Sorgu yanlış bir tarih veriyor

DATEADD(wk,DATEDIFF(wk,0,'2017-01-01'),0) 
+0

çalıştığını bana bildirin: 'DATEFIRST 1 SET DATEADD (dd, (1-DATEPART (dw, '2017/01/01')) seçin '2017-01 -01 ') '(SET DATEFIRST 1, DBA tarafından varsayılan olarak geride bırakılan Amerikan tarih stilini düzeltmek için gereklidir) – cha

+0

SET DATEFIRST 1'i denedim, sorun hala devam ediyor. – radical

cevap

1

Bu oluyor, çünkü bulamıyorsunuz. tarih 0'dan verilen tarihe kadar olan hafta sayısı. 0 aslında bir Pazartesi olan '1900-01-01' dir. Bu nedenle, DATEDIFF, tamamlanan haftaların sayısını, sağlanan tarihe kadar bu tarihten itibaren bulur. Bu nedenle 27 Mart 2016 için DATEDIFF 6065 (bir haftanın sonu olduğu gibi) ve 26 Mart 2016'da 6064 (neden hala bir haftanın sonu değil). Bu bağlantıda zaten anlatılmaktadır - Get first day of the week

+0

Teşekkürler. Bu bağlantı yardımcı oldu. – radical

1

Aşağıda belirtilen kodu deneyin. Aradığın şey bu mu?. Bu benim sorgularda bu kullanmak

declare @date date = '2017-01-01' 
select case when dateadd(dd,-datepart(dw,@date)+2,@date) < dateadd(dd,-day(@date)+1,@date) 
         then @date else dateadd(dd,-datepart(dw,@date)+2,@date) end as firstdayoftheweek 
+0

Yardımcı bulduysanız cevabı kabul etmeyi unutmayın – sam

+0

Bu bana 2017/01/02 veriyor. Bu tarih için haftanın başlangıcı 2017/12/26 olmalıdır. – radical

İlgili konular