回答
try this
select DATEPART(week,getdate())-DATEPART(week,'07-01-2012')
To get the week number starting from July 1st 2012
如果輸入日期是2013年1月1日,則返回負值。 – MatBailie 2012-08-02 10:56:52
此查詢僅給我本週。我必須列出從2000財政年度起的所有星期編號。 – user1571129 2012-08-02 11:05:03
通常SQL服務器刷新每個新年開始的星期數。它意味着它計算從01-01-2012開始的星期數,例如。那麼您是否希望在每年的每次更改時都重置週數,或者您希望自01-01-2000以來獲得總週數? – AnandPhadke 2012-08-02 11:46:03
如果您的財政年度第1周始終年7月7月1日至7日...
DECLARE
@inputDate DATETIME,
@fYearStart DATETIME,
@weekNumber INT
SET
@inputDate = getDate()
SET
@fYearStart = DATEADD(year, DATEDIFF(year, '20000101', DATEADD(month, -7, @inputDate)), '20000701')
SET
@weekNumber = DATEDIFF(day, @fYearStart, @inputDate)/7 + 1
如果你的財政金融周總是星期日至星期六...
DECLARE
@inputDate DATETIME,
@fYearStart DATETIME,
@weekNumber INT
SET
@inputDate = getDate()
SET
@fYearStart = DATEADD(year, DATEDIFF(year, '20000101', DATEADD(month, -7, @inputDate)), '20000701')
SET
@weekNumber = DATEDIFF(WEEK, @fYearStart, @inputDate)
其中一個或其他應該適用於您的定義week number
。
在日曆表中我有date,fiscal_year,fiscal_period。如何在此表格或視圖中計算週數? – user1571129 2012-08-02 11:11:14
@ user1571129 - 請在您的問題中包含該表中的示例數據,並顯示您想要的結果示例。然後,我們可以編寫適用於該示例數據的代碼。 – MatBailie 2012-08-02 11:22:55
如果一週從星期一開始。 – user1571129 2012-08-02 12:20:39
試試這個,使用可變@dt根據自己的需要:
DECLARE @dt DATETIME = GETDATE()
SELECT WeekOfMonth = DATEPART(wk, @dt) - DATEPART(wk,DATEADD(m, DATEDIFF(M, 0, @dt), 0)) + 1
編輯: 我理解錯誤的問題是我的錯,我的解決方案不是返回的年月份的一週。
使用部分@Dems答案並在此處更改礦區是一個完整的工作測試,可輸出3列WeekOfMonth,WeekOfYear和WeekOfFIscalYear,並根據日期和開始臨時表上的會計年度開始。但是我認爲一個財政年度的開始對於一家特定的公司來說總是一樣的。我只是爲測試添加了不同的日期和年份。
DECLARE @TT TABLE (auxVal INT,
auxdate DATETIME,
fiscal_year DATETIME
)
INSERT @TT
SELECT 100,'19120101 00:00:00','19120701' UNION ALL
SELECT 200,'18120615 00:00:00','18110701' UNION ALL
SELECT 100,'20121121 00:00:00','20120701' UNION ALL
SELECT 200,'20120101 00:00:00','20110701' UNION ALL
SELECT 100,'20150802 00:00:00','20140701' UNION ALL
SELECT 200,'20120330 00:00:00','20110701' UNION ALL
SELECT 322,'20110228 00:00:00','20100701'
SELECT DATEDIFF(week, DATEADD(MONTH, DATEDIFF(MONTH, 0, auxDate), 0), auxDate) + 1 WeekOfMonth,
DATEPART(wk, auxDate) WeekOfYear,
DATEDIFF(DAY, (DATEADD(YEAR, DATEDIFF(YEAR, fiscal_year, DATEADD(MONTH, -7, auxDate)), fiscal_year)), auxDate)/7 + 1 WeekOfFiscalYear
FROM @TT
結果:
WeekOfMonth WeekOfYear WeekOfFiscalYear
-------------------------------------------
1 1 27
3 25 51
4 47 21
1 1 27
2 32 5
5 13 40
5 10 35
-------------------------------------------
始終將輸出顯示爲1 – AnandPhadke 2012-08-02 11:01:31
爲什麼本輪輸入會在月初?並且基本方法'DATEPART(wk,x) - DATEPART(wk,y)'產生負數,其中x在該年的早些時候比y,即使x在*年之後的年份*。 – MatBailie 2012-08-02 11:04:47
對不起,我不知道你怎麼測試。我正在測試幾個不同的日期,我得到了正確的答案。 – Yaroslav 2012-08-02 11:07:20
對我來說這一次的工作:
SELECT dt AS DayDate,
CONVERT(VARCHAR,DATENAME(weekday,dt)) AS [DayOfWk],
CONVERT(int,CONVERT(VARCHAR,DATEPART(yyyy,dt)) + RIGHT('00' + CONVERT(VARCHAR,DATEPART(wk,dt)),2)) AS [WeekID],
'Week ' + CONVERT(VARCHAR,DATEPART(wk,dt))AS [WeekDsc],
DATEPART(wk,dt) AS [WeekNbr],
DATEADD(dd, -(DATEPART(dw, dt)-1), dt) AS [WeekStartDay],
DATEADD(dd, 7-(DATEPART(dw, dt)), dt) AS [WeekEndDay],
CONVERT(VARCHAR,CASE WHEN DATEPART(mm,dt) > 6 THEN DATEPART(yyyy,dt) + 1 ELSE DATEPART(yyyy,dt) END) + RIGHT('00'+ CONVERT(VARCHAR,DATEDIFF(week,DATEADD(dd, 7-(DATEPART(dw, CASE WHEN DATEPART(mm,dt) > 6 THEN CONVERT(VARCHAR,DATEPART(yyyy,dt)) + '-07-01' ELSE CONVERT(VARCHAR,DATEPART(yyyy,dt) - 1) + '-07-01' END)), CASE WHEN DATEPART(mm,dt) > 6 THEN CONVERT(VARCHAR,DATEPART(yyyy,dt)) + '-07-01' ELSE CONVERT(VARCHAR,DATEPART(yyyy,dt) - 1) + '-07-01' END) + 1,DATEADD(dd, -(DATEPART(dw, dt)-1), dt)) + 2) ,2) AS [FinWkID]
FROM
(
SELECT DATEADD(day,increment,'2014-01-01') dt
FROM
(
SELECT top 5000 ROW_NUMBER() OVER (ORDER BY s1.[object_id]) - 1 AS increment
FROM sys.all_objects AS s1
CROSS JOIN sys.all_objects AS s2
ORDER BY s1.[object_id]
) SQ
) DATE_GENERATOR
而不需要創建一個表。 只需用列日期名稱替換@date
declare @date datetime
set @date = '12/8/2016 00:00:00'
select case when datepart(month,@date) > 6 then
case when CEILING(datediff(day,'6/30/' + cast(datepart(year,@date) as nvarchar(4)),@date)/7.0) > 52
then 52 else CEILING(datediff(day,'6/30/' + cast(datepart(year,@date) as nvarchar(4)),@date)/7.0) end
else
case when CEILING(datediff(day,'6/30/' + cast(datepart(year,@date)-1 as nvarchar(4)),@date)/7.0) > 52
then 52 else CEILING(datediff(day,'6/30/' + cast(datepart(year,@date)-1 as nvarchar(4)),@date)/7.0) end
end WorkWeek
- 1. 從特定月份開始計算周
- 2. MySQL:如何計算特定日期的數週?
- 3. 按日期計算週數
- 4. Excel:計算特定月份,周,年的計費時間
- 5. mysql在特定日期之間的特定時間段內計算數據
- 6. php從特定日期查找週數
- 7. 計算日期之間的特定工作日的數量
- 8. 計算開始日期的週數
- 9. 計算天數到特定日期
- 10. Javascript「週末」日期計算?
- 11. 計算每週計劃的日期範圍內的預定日期的數量
- 12. 如何計算週期性數字?
- 13. 爲Java函數計算CPU週期
- 14. 如何根據日期計算「週數」?
- 15. 從DateTime對象計算週一至週日的星期
- 16. 如何計算2個日期給定的週數?
- 17. 如何計算/查找給定日期的週數?
- 18. 計算給定月份的週數
- 19. 計算與工資覈算期間相關的工資單週的行數
- 20. PHP一週前從特定日期
- 21. 計算特定日期後的星期數量
- 22. 計算特定範圍日期和時間的記錄
- 23. 從特定日期開始倒計數
- 24. 計算一週中某天的日期
- 25. 計算特定項目的總計數
- 26. 根據特定時區計算日期
- 27. 如何計算特定時間間隔內的物品數量?
- 28. 定期計算
- 29. 從數字計算日期
- 30. 獲取給定日期的週數(周從星期天開始)
是從7月1日的前七天星期?因此,第53周的最後1 *(或閏年2)*天? – MatBailie 2012-08-02 10:51:39
你從第0周還是第1周開始?你對今年第一週的定義是什麼? – 2012-08-02 10:52:14
請問在使用谷歌之前,請務必不要在這個網站上問一些即使在這裏也是微不足道的東西。無論是哪種情況,對您的問題更具體,並解釋細節以獲得更好的答案。 – Yaroslav 2012-08-02 10:52:51