我在大學工作,我們的學生管理系統學年開始日期由8月1日或之前的星期一決定。我需要在我的查詢中匹配這一點,有沒有辦法在此日期之前或之前輕鬆獲取星期一的日期。T-sql日期星期一
回答
set datefirst 1; -- Make Monday the first day of the week
select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')
返回2009年7月27日,這是週一或之前8月1日將其更改爲2005年時,8月1日是個週一,查詢將返回08-01
你可以使用datepart來獲得週日,然後做一點數學來回到你的星期一。此示例使用美國默認的datefirst 7(其中星期一是本週的第2天)。調整要添加的日期,以星期一的哪一天爲您的區域設置。
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
非常哈克
DECLARE @weekday int
SELECT @weekday = DATEPART(WEEKDAY, '1-Aug-2009')
SELECT CASE
WHEN @weekday = 1 THEN '1-Aug-2009' ELSE DATEADD (dd,(@weekday-2)*-1, '1-Aug-2009')
END
這是一個通用的算法,將返回任何月份的第一個星期一(@inputdate):
DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
這是在SQL Server中獲取本月第一個星期一的常用方法。這link解釋了上述計算如何與許多其他日期計算一起工作。
下面是上面的算法可以用來獲得週一或一個月的第一天之前:
-- Set month to get Monday before or at 1st of month.
DECLARE @inputDate DATETIME
SET @inputDate = '2009-08-01'
-- Get first Monday of month.
DECLARE @firstMonday DATETIME
SET @firstMonday = DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
-- Determine date for first Monday on or before 1st of month.
DECLARE @startDate DATETIME
SET @startDate = @firstMonday
IF @firstMonday > @inputDate
SET @startDate = DATEADD(wk, -1, @firstMonday)
SELECT @startDate
接受的答案並沒有爲我工作,因爲我需要一個都週日周和週一周在同一個查詢中。這可以跨越不同的 「DATEFIRST」 設置:
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
「DATEPART(DW, '19000101')」,將決定你的 「DATEFIRST」 自1900-01-01設置是在星期一。如果您想要以星期二爲基礎的星期,則可以將19000101更改爲19000102.
順便說一下,'20110515'是唯一適用於所有SQL Server文化設置的日期格式。像「2011-05-06」這樣的日期在某些國家會被誤解。 (贊成Itzik本甘指出這一點)
+1,用於優雅的'datefirst'不可知解決方案。 – 2012-01-24 19:42:22
不錯,應該是被接受的答案 – nhaberl 2016-04-12 09:27:16
- 1. 循環日期和返回星期tsql
- 2. PHP星期一星期一和星期六日期問題
- 3. TSQL從「種子」日期確定每隔一個星期五
- 4. 如何在周開始日期(星期一)從WeekNumber和Year TSQL
- 5. Django的日期字段得到一個星期就像星期日星期一
- 6. 獲取從給定日期星期一到星期五的星期日期
- 7. 星期一組的日期?
- 8. 本週星期一日期
- 9. 獲取本週的開始日期和結束日期(星期一從星期一開始,星期日結束)
- 10. 獲取基於給定日期的星期一至星期日
- 11. 作爲星期一或星期日influxdb使星期開始
- 12. jquery日期 - 確定一個星期日?
- 13. TSQL相對星期編號
- 14. tSQL根據日期字段按星期彙總數據?
- 15. dropdownlist日期/星期
- 16. UNIX日期:如何將星期數轉換爲日期範圍(星期一至星期日)?
- 17. TSQL日期轉換
- 18. TSQL日期條件
- 19. 在SQL中使用今天的日期獲取星期日期(星期一)
- 20. SQL-自動Bucketize進入那個星期的所有日期星期一日期-
- 21. 選擇日期這個星期一和這個星期五之間的日期
- 22. SQL Server 2012-星期日期星期六到星期五
- 23. 計算下一個星期一到指定日期的日期
- 24. 查找第一個星期一的日期指定的日期
- 25. SQL組日期爲星期日期
- 26. 獲取星期數從一個星期的日期開始
- 27. 使用系統日期獲取星期一 - 星期五
- 28. PHP獲取這個星期的日期星期一
- 29. 查找當前星期的開始日期(星期一)
- 30. 計算日期星期一作爲星期幾= 1
我標記下來,因爲以下返回一個不正確的結果:select dateadd(dd,-datepart(dw,'2011-05-15')+ 2,'2011 -05-15' )。這返回'2011-05-16'。 – 2011-05-19 21:27:40