0
A
回答
1
(DATEADD(DAY, -1, DATEADD( MONTH, 1 , month + '-01') -
DATEADD(DAY, 7 - DATEPART(WEEKDAY, month + '-01'), month + '-01')
) DIV 7 + 1
我不知道有多少ANSI SQL兼容這只是
它工作在MySQL
(不是更改後,應該在SQL Server現在的工作)。
month
應在'yyyy-mm'
格式
4
我不知道你的意思是說:
有沒有辦法讓週一在給定的月份( 一年)的數量而不使用T-SQL?
如果您希望能夠跨所有數據庫執行此操作的通用代碼片段,請將其忽略。我懷疑你甚至可以在兩個不同的數據庫上運行一個版本。像工作日這樣的日期和事情往往會在數據庫供應商中以不同方式實施。
這裏是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)
編輯,這裏是在另一個查詢中查找每月和每年的星期一計數作爲子查詢的版本:
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)
+0
我的意思是我已經有了SQL語句(從VB運行),所以如果我可以只添加子查詢來獲得星期一,那就太棒了。是的,如果我提到我正在使用MS SQL Server 2005,它會有所幫助! – cliffy
1
試試這個:)
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. 用Excel函數確定一個月中的上個星期五
- 2. 計算一個月內的星期數,包括部分星期
- 3. 使用T-sql獲取本月的最後一個星期一
- 4. 如何使用Javascript查找一個月內的星期數
- 5. sql server中給定月份的最後一個星期五
- 6. 使用T-SQL獲取下個月的第一個星期日
- 7. 檢索特定月份中的星期一數量
- 8. jquery日期 - 確定一個星期日?
- 9. 時刻JS獲得一個月內的星期數
- 10. 如何計算一個月的星期二數量?
- 11. php在一個月內獲得所有星期日的日期
- 12. 查找一個月中星期三(或其他工作日)的數量 - Oracle SQL
- 13. 在一個月內改變從一個bash腳本調用一個星期
- 14. strtotime認爲「下個月的第一個星期日」=星期三?
- 15. 計算給定日期範圍內星期一的數量
- 16. 計算一個星期內一個特定單詞出現在一個星期內的次數,其範圍在
- 17. 查找月的第一個星期二
- 18. 月的第一個星期二
- 19. 定義一個營業月份:一個月的第一個星期日,直到下個月的第一個星期六
- 20. 工作在一個月內每兩週在星期一執行
- 21. 查找一個月的第三個星期日之前的星期一
- 22. 使用NSCalendar - 獲取下一個月的第一個星期二
- 23. 如何用js獲得一個月的4個星期一?
- 24. SQL - 查詢當前月份前三個星期內的內容
- 25. C#:找出哪個星期一是本月的第3個星期一?
- 26. 獲取月份的第一個星期一和最後一個星期日,穿過月份邊界
- 27. 如何獲得一個月的第一個星期一?
- 28. '第一個星期一前一個月' 的strtotime混亂
- 29. 如何確定從angularjs 2的特定日期起一個月內的天數?
- 30. 在JavaScript中顯示一個月的一個星期數字的日期?
你能澄清你的意思是什麼 「而不使用T-SQL」?你的意思是隻使用ANSI SQL嗎? –
這是關於SQL Server的問題嗎?如果您不打算使用T-SQL,您計劃使用哪種技術? –
對不起,應該指出我可以使用TSQL,但不想!我已經有SQL語句(從VB.Net運行),並希望只需添加到它,而不必編寫其他功能。它確實看起來像我必須編寫的功能或使用預先生成的表格,如Andrew – cliffy