2012-12-21 25 views

cevap

9

5 Ocak 1900 Cuma idi. Bu, bir taban tarihini kullanır ve geçen cuma herhangi bir ayda hesaplar, ancak ayın kendisinin değil, ay içinde bir tarih vermeniz gerekir. senin ayda bir tarihe sahip bu 2012-12-01 değiştirin

SELECT DATEADD(DY,DATEDIFF(DY,'1900-01-05',DATEADD(MM,DATEDIFF(MM,0,'2012-12-01'),30))/7*7,'1900-01-05') 

Ayrıca Bu calendar table kullanarak çok daha basit olurdu vb 1900-01-06

+0

çok güzel bir çözüm, tüm durumları test ettim ve çalışıyor –

+1

Kullanıcının dili İngilizce değilse, '5-Ocak-1900' ile '19000105' değiştirilerek kolayca çözülürse çalışmaz. Ancak 'sihirli' sayılara ve kodlardaki tarihlere güvenmek oldukça şüpheli bir uygulamadır çünkü bu, kodun gerçekten ne anlama geldiğinin okunması konusunda hiç de açık değildir. Özellikle orijinal programcı herhangi bir yorum bırakmazsa, bu gibi bir kodu sürdürmek çok zor olabilir. – Pondlife

+0

Beni takip ediyor musun? :-) –

2

İLE 1900-01-05 değiştirerek son Cumartesi almak için kullanabilir; Kendi ihtiyaçları için uygun sütunlar oluşturduktan sonra sadece bu yazabilirsiniz:

select 
    max([Date]) 
from 
    dbo.Calendar 
where 
    YearAndMonth = 201211 and 
    DayOfWeek = 'Friday' 

kod çok daha okunabilir ve kendi kullanabilirsiniz çünkü Bir takvim tablo genellikle işlevlerini kullanarak daha tarihlerinin tespiti için çok daha iyi bir çözümdür Ülkede ve hatta şirketler arasında geniş çeşitlilik gösteren WeekNumber, FinancialQuarter vb.

İlgili konular