2010-12-05 22 views
2

私は立ち往生しています。今日の日付例えば2010-12-04を提供することにより、私は、次の結果が得られます。今日のSQLを使って今日の日付を取得する(mon-sun)

STARTDATE = 2010-11-29
ENDDATE = 2010-12-05

基本的に私はそれように、私のクエリをフィルタ処理する必要がありますこの「週」のデータを教えてください

これをどのように開始するかについてのアイデアはすばらしくなります!

おかげで、

タルン

+0

SQLServerにdatename関数があると思うので、今日の日付(2010-12-04)から "土曜日"を得るために使うことができます。 SQL Serverを使用していますか? –

+0

この質問は重複している可能性があります:あなたが検索することをお勧めします。 –

答えて

2

更新日:この機能はGraham at SqlTeamが原因です。任意の日付の月曜日の日付を返します。それはどんなDATEFIRSTの設定にも対応する必要があります日付のさまざまな機能については

CREATE FUNCTION dbo.WeekCommenceMondayDate(@MidWeekDate DateTime) 
RETURNS DateTime AS 
BEGIN 
DECLARE @WeekCommence DateTime 
    SET @WeekCommence = DateAdd(d, -((@@DATEFIRST + DatePart(dw, @MidWeekDate) -2) % 7), @MidWeekDate) 
    RETURN @WeekCommence 
END 


declare @today datetime = '2010-12-04' 
declare @weekstartdate datetime 

set @weekstartdate = dbo.WeekCommenceMondayDate(@today) 
select @weekstartdate as weekstartdate 
select DATEADD(DD, 6, @weekstartdate) as weekenddate 

hereを参照してください。

+0

... SQL ServerがDATEFIRSTの正しい値で構成されていることに注意してください - ひどく死ぬ文字列ベースのソリューションを提案します:) –

+0

DATEFIRSTに何が設定されているかにかかわらず動作すると思います。 –

+0

指定された基準に基づいて修正しますが、ほとんどの人は日曜日から土曜日までの週を考慮します。 – shamazing

0

以下動作するはずです - あなたはそれを微調整する必要があるかもしれませんので、言語が使用 - あなたは数週間を開始するときに明らかに依存。

DELCARE @startdate DATETIME = @thedate 
WHILE DATENAME(WEEKDAY, @startdate) <> 'Monday' 
BEGIN 
    SET @startdate = DATEADD(DAY, -1, @startdate) 
END 

' @startdate should now be the closest Monday on or prior to @thedate. 

... @ enddate計算は読者の練習として残しています。 :)

+0

@Mitch。あなたがDATEFIRSTの特定の価値を保証できるなら、私は同意するでしょう - 私はおそらくまだ上記を使用しますが、DATEPART(WEEKDAYと関連する値をチェックしてください。非常に頻繁に呼び出されない限り、それは恐ろしい_then_ ... –

+0

'@@ DATEFIRST'を使用してそれに応じて調整することができます。 –

関連する問題