T-SQLを使用して、getdate()の今年の月の最初の日を表示する新しい列が必要です。 その後、この特定の日付に行を数える必要があります。私はCTEまたは一時テーブルでそれを行う必要がありますか?与えられた年の数ヶ月のアドホック表について現在のgetdateの各月の再帰的な初日
-1
A
答えて
1
:
declare @year date = dateadd(year,datediff(year,0,getdate()),0)
;with Months as (
select
MonthStart=dateadd(month,n,@year)
from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) t(n)
)
select MonthStart
from Months
rextesterデモ:http://rextester.com/POKPM51023
リターン:
+------------+
| MonthStart |
+------------+
| 2017-01-01 |
| 2017-02-01 |
| 2017-03-01 |
| 2017-04-01 |
| 2017-05-01 |
| 2017-06-01 |
| 2017-07-01 |
| 2017-08-01 |
| 2017-09-01 |
| 2017-10-01 |
| 2017-11-01 |
| 2017-12-01 |
+------------+
最初の部分:dateadd(year,datediff(year,0,getdate()),0)
は、以来、年の数を追加します1900-01-01
から1900-01-01
までです。それで、年の最初の日付が返されます。また、year
を切り捨ての他のレベル(年、四半期、月、日、時、分、秒など)にスワップすることもできます。
common table expressionとtable value constructor (values (...),(...))
をソース番号0〜11に使用します。これらの番号は、年の始まりに月として追加されます。
0
わからないあなたは、再帰的な必要がなぜ...しかし、月の最初の日のために、あなたは以下のようなクエリを試すことができます。
Select Dateadd(day,1,eomonth(Dateadd(month, -1,getdate())))
0
declare @year date = dateadd(year,datediff(year,0,getdate()),0)
;WITH months(MonthNumber) AS
(
SELECT 0
UNION ALL
SELECT MonthNumber+1
FROM months
WHERE MonthNumber < 11
)
select dateadd(month,MonthNumber,@year)
from months
2
2012+場合は、DateFromParts()
を使用することができますは、日付のリストを取得するには
Select D = DateFromParts(Year(GetDate()),N,1)
From (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) N(N)
戻りトランスについては
D
2017-01-01
2017-02-01
2017-03-01
2017-04-01
2017-05-01
2017-06-01
2017-07-01
2017-08-01
2017-09-01
2017-10-01
2017-11-01
2017-12-01
編集(月によって仮定)の取引を取得するには
を数えます。これは、左の小さな問題が
-- This is Just a Sample Table Variable for Demonstration.
-- Remove this and Use your actual Transaction Table
--------------------------------------------------------------
Declare @Transactions table (TransDate date,MoreFields int)
Insert Into @Transactions values
('2017-02-18',6)
,('2017-02-19',9)
,('2017-03-05',5)
Select TransMonth = A.MthBeg
,TransCount = count(B.TransDate)
From (
Select MthBeg = DateFromParts(Year(GetDate()),N,1)
,MthEnd = EOMonth(DateFromParts(Year(GetDate()),N,1))
From (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) N(N)
) A
Left Join @Transactions B on TransDate between MthBeg and MthEnd
Group By A.MthBeg
戻り
TransMonth TransCount
2017-01-01 0
2017-02-01 2
2017-03-01 1
2017-04-01 0
2017-05-01 0
2017-06-01 0
2017-07-01 0
2017-08-01 0
2017-09-01 0
2017-10-01 0
2017-11-01 0
2017-12-01 0
関連する問題
- 1. 各月の初日
- 2. JavaScriptで現在の月の最初の日と最終日
- 3. SSRSパラメータ開始日現在の月の1年前から現在の月の初日まで
- 4. 現在の日付の1ヶ月と現在の日付の+1月
- 5. 現在の月の現在の日付の最初の日付の範囲をwhere句
- 6. Hibernateの再帰的な初期化
- 7. 期間内の各月の初日と最終日の検索
- 8. 現在の月が12月の場合、来月の最初の日の検索方法
- 9. 現在ヶ月の終わりに開始日とAS3での現在の月の終了日
- 10. 現在の日+ N日が翌月または前月の日である
- 11. Var whatever = new日付(年、月、0).getDate()?
- 12. は再帰的にディレクトリを移動して、現在のCLI
- 13. 現在のディレクトリを除く再帰的scp
- 14. モーメントJS現在の月の最初と最後の日を取得し
- 15. 現在の月の最初と最後の日を取得する方法
- 16. GETDATE先月
- 17. 月/月を除く月の現在の日付を取得する
- 18. 現在のディレクトリではないファイルを再帰的に検索する
- 19. 月と日付を現在の日付と比較する
- 20. SQLクエリ - 現在の日付に基づく動的月の変更
- 21. 再帰的な無限日常的な動的ループ配列PHP
- 22. SSRS現在の月のパラメータ
- 23. JavaScriptの現在の日付から前月の最初の日付を取得する
- 24. 先月の28日から現在の月の27日までの日数をdb2で調べる方法
- 25. パラメータを渡し、現在の月の日付とゲットする前月のデータ
- 26. Python非再帰的な深さの最初の検索
- 27. Java:再帰的な深さの最初の走査
- 28. 日付テキストボックスは、常に現在の月の最初の日付である必要があります。
- 29. SQL Serverで現在の月の数値を取得する(1月1日、12月12日)
- 30. PHPの再帰的なディレクトリリストフロー
おかげで作成された日付に参加になります!私は本当にこの簡単な解決に感謝します –
ありがとう!あなたの考えの小さな説明を提供できますか? – Proffesore
@Proffesore FROM部分は、フィールド名がNの12個のレコード(1-12)を生成します。次に、DateFromParts()でNを月として使用します。 ... DateFromPart(年、月、日)... –