答えて
(DATEADD(DAY, -1, DATEADD( MONTH, 1 , month + '-01') -
DATEADD(DAY, 7 - DATEPART(WEEKDAY, month + '-01'), month + '-01')
) DIV 7 + 1
私はこれが(変更後、それは今SQL Serverで動作するはずではない)、それは、MySQLで動作
ですが、どのくらいのANSI SQL互換のか分かりません。
month
私はあなたが言って何を意味するかわからないんだけど'yyyy-mm'
形式
にする必要があります:
が与えられた月の月曜日の数(および 年)を取得する方法はありますT-SQLを使用しないでください?
すべてのデータベースでこれを行うユニバーサルコードフラグメントが必要な場合は、忘れてしまいます。私はあなたが2つの異なるデータベース上で動作するバージョンを手に入れることさえできるとは思っていません。平日のような日付やものは、データベースベンダーによって違った方法で実装される傾向があります。ここで
は、TSQLの道(月曜日月カウント)である:ここでは
;with AllDates AS
(SELECT CONVERT(datetime,CONVERT(varchar(6),GETDATE(),112)+'01') AS DateOf
UNION ALL
SELECT DateOf+1
FROM AllDates
WHERE
MONTH(DateOf+1)=MONTH(CONVERT(datetime,CONVERT(varchar(6),GETDATE(),112)+'01'))
)
SELECT COUNT(DateOf) AS MondayCountMonth
FROM AllDates
WHERE DATENAME(weekday,DateOf)='Monday'
は、TSQLの道(月曜年カウント)である:OPのコメントに基づいて
;with AllDates AS
(SELECT CONVERT(datetime,CONVERT(varchar(4),GETDATE(),112)+'0101') AS DateOf
UNION ALL
SELECT DateOf+1
FROM AllDates
WHERE
YEAR(DateOf+1)=Year(CONVERT(datetime,CONVERT(varchar(4),GETDATE(),112)+'0101'))
)
SELECT COUNT(DateOf) AS MondayCountYear
FROM AllDates
WHERE DATENAME(weekday,DateOf)='Monday'
OPTION (MAXRECURSION 367)
EDIT、ここれます月別および月曜日の月曜日を別のクエリ内のサブクエリとしてカウントするバージョン:
DECLARE @YourTable table (Col1 int, Col2 varchar(5))
INSERT @YourTable VALUES (1,'aaa')
INSERT @YourTable VALUES (2,'bbb')
INSERT @YourTable VALUES (3,'ccc')
;with MonthMondayCount AS
(SELECT CONVERT(datetime,CONVERT(varchar(6),GETDATE(),112)+'01') AS DateOf
UNION ALL
SELECT DateOf+1
FROM MonthMondayCount
WHERE
MONTH(DateOf+1)=MONTH(CONVERT(datetime,CONVERT(varchar(6),GETDATE(),112)+'01'))
)
,YearMondayCount AS
(SELECT CONVERT(datetime,CONVERT(varchar(4),GETDATE(),112)+'0101') AS DateOf
UNION ALL
SELECT DateOf+1
FROM YearMondayCount
WHERE
YEAR(DateOf+1)=Year(CONVERT(datetime,CONVERT(varchar(4),GETDATE(),112)+'0101'))
)
SELECT
y.*
,(SELECT COUNT(DateOf) AS MondayCountMonth FROM MonthMondayCount WHERE DATENAME(weekday,DateOf)='Monday') AS MondayCountMonth
,(SELECT COUNT(DateOf) AS MondayCountYear FROM YearMondayCount WHERE DATENAME(weekday,DateOf)='Monday') AS MondayCountYear
FROM @YourTable y
OPTION (MAXRECURSION 367)
OUTPUT:
Col1 Col2 MondayCountMonth MondayCountYear
----------- ----- ---------------- ---------------
1 aaa 5 52
2 bbb 5 52
3 ccc 5 52
(3 row(s) affected)
私が意味していたのは、既にVBから書かれたSQL文が書かれていたからです。月曜日にサブクエリを追加するだけでいいのですが。そして、私がMS SQL Server 2005を使用していると言えば、それは役に立ちました! – cliffy
はこれを試してみてください。)
DECLARE @tmpDate as date
set @tmpDate = getdate(); --you can add any date
DECLARE @Startdate as varchar(8)
DECLARE @Enddate as varchar(8)
SELECT @Startdate = replace(convert(varchar,cast(DATEADD(month, DATEDIFF(month, 0, @tmpDate), 0) as date) , 111), '/', '');
SELECT @Enddate = replace(convert(varchar, cast(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@tmpDate)+1,0)) as date), 111), '/', '');
with [dates] as (
select convert(date , @Startdate ) as [date] --start
union all
select dateadd(day , 1 , [date])
from [dates]
where [date] < @Enddate)
Select X.WeekDayNumber, count(X.WeekDayNumber) as NumberOfDays
from (
SELECT [date] , DATEPART(weekday,[date]) as WeekDayNumber
from [dates]
WHERE [date] IS NOT NULL)X
Group by X.WeekDayNumber
option (maxrecursion 0)
- 1. 今月と先月の出席のためのSQLサブクエリ
- 2. 月の日数を決定すると、3月の月間に異なるカウントが返されます
- 3. SQL変数月
- 4. 特定の月の毎日の値(または数ヶ月間)
- 5. SQL Serverの私はSQL Serverで(現在の月を除く)2つの日付の間の月数を見つけるために、クエリをやっヶ月
- 6. SQLトリックカウントの行数(月)
- 7. SQL - 月間売上高の標準偏差の決定
- 8. 過去12か月間の各月のSQL Server OSタイプの数
- 9. 月のSQL
- 10. 日付(月)でソートするJavaのSQLステートメント
- 11. いいえSQLのCOUNTで指定した月のレコードなく、GROUP BY月
- 12. 毎月または毎月合計の計算を計算するためのSQLプロシージャの作成方法
- 13. 現在の月から月のリストを取得するSQLクエリ
- 14. 月の月を引く月
- 15. SQL:月の初めから始まる前月の抽出方法
- 16. SQL - 時間の初め、月など
- 17. SQL Serverで現在の月の数値を取得する(1月1日、12月12日)
- 18. Oracle SQL - グループ過去12ヶ月間の月間データ・ギャップを埋める
- 19. 月間の月数によるパンダグループ
- 20. 今月のSQLで
- 21. 月月の範囲の終了日を見つけるSQL Server
- 22. 1月の月の重複日数
- 23. オラクルSQL月%%完了数式
- 24. 月の累積合計のためのSQLサーバーウィンドウの機能
- 25. 月間/月をx軸にプロットする方法月間の間隔を日数で指定する
- 26. 特定の月から数えて数え始めます
- 27. 月額サブスクリプションを設定するためのスキーマ
- 28. get日付から月の月数
- 29. SQL次の月の15日
- 30. SQL Serverの - 1ヶ月のレコードに複数ヶ月以上の分割記録
あなたは "T-SQLを使用せず" によって何を意味するのか明確にすることはできますか? ANSI SQLのみを使用することを意味しますか? –
これはSQL Serverに関する質問ですか? T-SQLを使用しない場合は、どのようなテクノロジを使用する予定ですか? –
申し訳ありませんが、私はTSQLを使うことができると指摘しておきましたが、ただしたくありませんでした!私は既にSQL文(VB.Netから実行中)を持っていて、別の関数を書く必要なしに追加するだけでいいと思っていました。それは、私が関数を書いたり、Andrewが述べたように事前に生成されたテーブルを使用しなければならないように見える – cliffy