には、次のシナリオを使用してSQLで特定の日付を取得する方法があります。SQLで月の日付を取得する方法
日が20日である:
1)現在の月の日付が2017年1月23日であるならば、私は3日
2すなわち2017年1月20日からすべてを取得したいと思います。現在の月の日付が2017年1月17日であれば、2016年12月20日からすべてを取得したいと考えています。
したがって現在の月または前月の20日が現在の日付に基づいています。
これをSQLで構造化する方法についてのアイデアはありますか?
には、次のシナリオを使用してSQLで特定の日付を取得する方法があります。SQLで月の日付を取得する方法
日が20日である:
1)現在の月の日付が2017年1月23日であるならば、私は3日
2すなわち2017年1月20日からすべてを取得したいと思います。現在の月の日付が2017年1月17日であれば、2016年12月20日からすべてを取得したいと考えています。
したがって現在の月または前月の20日が現在の日付に基づいています。
これをSQLで構造化する方法についてのアイデアはありますか?
この式は、過去にある月の直近の20日を見つける必要があります:
select
DATEADD(month,
DATEDIFF(month,'20010101',GETDATE()),
CASE WHEN DATEPART(day,GETDATE()) < 20 THEN '20001220'
ELSE '20010120' END)
それは全体の過去のある一定の日付の間の月数と今日を計算することによって動作します。
次に、その月数を別の固定日(月の20日)に追加します。しかし、CASE
を使用して、この2番目の固定日付と最初の日付との関係を決定します。同じ月または前の日付ですか?
いつでもMONT(日付フィールド)を使用して日付の月の数値を取得し、前の月に-1を実行することができます.YEAR(日付フィールド)は同じ方法で動作します。
願っています!
よろしく
私は通常の操作のこの種のいくつかの機能を構築し、それが時間的に変化することができ、それが簡単にmodificableです。
CREATE FUNCTION GetDates(@Day int)
RETURNS @DateRange TABLE
(
StartDate DATETIME,
EndDate DATETIME
)
AS
BEGIN
DECLARE @StartDate VARCHAR(30),
@EndDate VARCHAR(30),
@CurDate DATETIME,
@CurDay INT;
SET @CurDate = GETDATE();
SET @CurDay = DAY(GETDATE());
SET @EndDate = CONVERT(VARCHAR(30), @CurDate, 112);
IF @CurDay <= @Day
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), DATEADD(month, -1, @CurDate)), 112);
END
ELSE
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), @CurDate), 112);
END
INSERT INTO @DateRange VALUES (CAST(@StartDate AS DATETIME), CAST(@EndDate AS DATETIME));
RETURN
END
GO
次に、あなたが参加文に追加するか、直接のような選択文を使用して、それを呼び出すことができます。hereそれを試すことができます
select StartDate, EndDate from GetDates(14);
。
あなたはDBMSを使用していますか?また、あなたの日付の列はどうですか?例を与えてください – Matt
使用しているdbmsにタグを付けてください。 (多くの製品は、日付/時刻に関してはANSI SQLに準拠していません)また、いくつかのサンプルテーブルのデータと期待される結果、および書式付きテキストを追加します。 – jarlh
また、日付が20日の場合は、その前または次の月のデータはどうですか? – Matt