2010-02-18 52 views
6

我確定我在這裏忽略了一些非常基本的東西,但是在查詢並搜索了大約一個小時後,我無法將其包圍。在SQL中獲取星期

我有一個日期表已經存在,如果有幫助。它擁有過去幾年的日期值,每晚通過一個存儲過程進行更新,該過程由服務器上的作業運行。

我需要做的是將星期一到星期天抽出來,這樣我就可以正確地將它們加入到跟蹤表中,以獲得每週的熱門圖。我不想寫出52個逐漸變大的選擇語句,並將它們聯合起來,原因很明顯,我不喜歡遊標的想法。

我已經用了幾個月和幾天的時間來完成這個工作,但由於某些原因,星期幾的性質讓我感到困惑,或者它本質上不同。

有關如何在沒有遊標或巨大選擇/聯合的情況下自動化進程的任何想法?如果有必要,我會去光標並將其轉儲到桌子上,但我希望不會。

FYI在它的結束我想要的格式是:

[Week number] | [StartDate] | [EndDate] 

對於每個星期

+1

什麼DBMS您使用的? – 2010-02-18 18:04:17

+0

數據庫是Sql 2k5。在我的辯護中,它被標記爲sql :) – 2010-02-18 18:06:40

+3

@C Bauer:在我們的防禦中,SQL meas「結構化查詢語言」,一種數據庫編程語言:http://en.wikipedia.org/wiki/SQL :) – 2010-02-18 18:09:17

回答

8

我可能是偏離航向與你想要什麼,但它聽起來像是你想這樣的的東西:

- eg算上按周分組的記錄,2009年

SELECT DATEPART(wk, DateField) AS WeekNumber, COUNT(*) AS HitsForWeek 
FROM SomeTable 
WHERE DateField >= '20090101' AND DateField < '20100101' 
GROUP BY DATEPART(wk, DateField) 
+0

謝謝,它是不是我想要的,但它讓我走上了正確的軌道! – 2010-02-18 18:25:52

3

加一件事 - AdaTheDev的答案是正確的,但默認情況下它會給你星期日到星期六週。如果你想從星期一到星期天星期,你必須執行

SET DATEFIRST 1

在一週的第一天設置爲星期一(1)。您可以查詢@@ DateFirst以查看您的設置是什麼 - 默認情況下,它是美國英語配置中的7(星期日)。

0

您可能更喜歡使用datediff(day, '19800107', yourDate)/7(1980年1月7日是已知的星期一),以便您不必擔心繫統何時認爲一週已經開始。此外,這種機制很容易適應不同的星期,而不必考慮@@DATEFIRST的價值,只需選擇已知的星期日或已知的星期四等。

1

我發現星期也很棘手,下面是我用來將日期轉換爲日期星期組的代碼。下面是一些例子,它將在星期一開始的星期五或星期的週末返回,而不必維護支持表。如果這是您想要使用的,您也可以調整它們以使用星期六和星期日。

--Returns the weekending (Friday) for a particular day 
SELECT DATEADD(day, -DATEPART(weekday,yourDate), yourDate)+6 

--Returns the week commencing (Monday) for a particular day 
SELECT DATEADD(day, -DATEPART(weekday,yourDate)+2, yourDate) 

編碼愉快:)