私は立ち往生しています。今日の日付例えば2010-12-04を提供することにより、私は、次の結果が得られます。今日のSQLを使って今日の日付を取得する(mon-sun)
STARTDATE = 2010-11-29
ENDDATE = 2010-12-05
基本的に私はそれように、私のクエリをフィルタ処理する必要がありますこの「週」のデータを教えてください
これをどのように開始するかについてのアイデアはすばらしくなります!
おかげで、
タルン
私は立ち往生しています。今日の日付例えば2010-12-04を提供することにより、私は、次の結果が得られます。今日のSQLを使って今日の日付を取得する(mon-sun)
STARTDATE = 2010-11-29
ENDDATE = 2010-12-05
基本的に私はそれように、私のクエリをフィルタ処理する必要がありますこの「週」のデータを教えてください
これをどのように開始するかについてのアイデアはすばらしくなります!
おかげで、
タルン
更新日:この機能は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を参照してください。
... SQL ServerがDATEFIRSTの正しい値で構成されていることに注意してください - ひどく死ぬ文字列ベースのソリューションを提案します:) –
DATEFIRSTに何が設定されているかにかかわらず動作すると思います。 –
指定された基準に基づいて修正しますが、ほとんどの人は日曜日から土曜日までの週を考慮します。 – shamazing
以下動作するはずです - あなたはそれを微調整する必要があるかもしれませんので、言語が使用 - あなたは数週間を開始するときに明らかに依存。
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計算は読者の練習として残しています。 :)
@Mitch。あなたがDATEFIRSTの特定の価値を保証できるなら、私は同意するでしょう - 私はおそらくまだ上記を使用しますが、DATEPART(WEEKDAYと関連する値をチェックしてください。非常に頻繁に呼び出されない限り、それは恐ろしい_then_ ... –
'@@ DATEFIRST'を使用してそれに応じて調整することができます。 –
SQLServerにdatename関数があると思うので、今日の日付(2010-12-04)から "土曜日"を得るために使うことができます。 SQL Serverを使用していますか? –
この質問は重複している可能性があります:あなたが検索することをお勧めします。 –