2013-10-09 113 views

回答

6

這個表達式將永遠給你前面的週六晚上7點,獨立的DATEFIRST設置:

select DATEADD(week, 
     DATEDIFF(week,'19000101',CURRENT_TIMESTAMP),'1899-12-30T19:00:00') 

如果它在星期六運行,它會給你上個星期六。

+0

謝謝,非常簡潔。 – Fearghal

+0

接下來,在DATEDIFF中增加1周。例如:'選擇DATEADD(周, DATEDIFF(周,'19000101',CURRENT_TIMESTAMP)+ 1,'1899-12-30T19:00:00')' – Ascension

0

假設你的「上週六晚上7點」的標準是不變...

SELECT T.* 
FROM Table T 
WHERE T.dtDate >= CONVERT(DATETIME, '2013-10-05 19:00') 
+0

要明確地給出一個日期和時間,你應該使用'T'作爲分隔符,而不是空間,並指定秒:'設置日期格式DMY; select MONTH(CONVERT(DATETIME,'2013-10-05 19:00'))'產生5,而不是10.使用'2013-10-05T19:00:00''而不管日期設置爲10有效 –

+0

否最後一個星期七晚上不是一個常數。 – Fearghal

1

SELECT * From TableName Where MyDate >= DATEADD(HH,19, DATEADD(DAY, (DATEDIFF(DAY, '19000106', GetDate()) - 1)/7 * 7, '19000106'))

+0

謝謝,作品魅力。我將另一個答覆標記爲答案,因爲我發現它更簡潔(或者至少可以理解,這是對我的錯誤sql技巧的評論,而不是您的好先生)。再次感謝。 – Fearghal

相關問題