我用這個SQL得到一週的開始日(星期一),當用戶輸入的其他日子日期問題得到一週的開始日(星期一)
@StartDate具有格式(年月日)
SQL:CAST(convert(varchar(12),DATEADD(week,DATEDIFF(week,0,@StartDate),0),112) as int
的問題是,當輸入的日期爲週二至週六,它返回到當前周的週一正確。然而,當輸入的日期是星期日時,它會在下週的星期一返回日期。
有誰能夠告訴我,我做錯了什麼
謝謝
我用這個SQL得到一週的開始日(星期一),當用戶輸入的其他日子日期問題得到一週的開始日(星期一)
@StartDate具有格式(年月日)
SQL:CAST(convert(varchar(12),DATEADD(week,DATEDIFF(week,0,@StartDate),0),112) as int
的問題是,當輸入的日期爲週二至週六,它返回到當前周的週一正確。然而,當輸入的日期是星期日時,它會在下週的星期一返回日期。
有誰能夠告訴我,我做錯了什麼
謝謝
您週日屬於同一週週一,這將使週一的一週的第一天。它應該解決您的查詢
set datefirst 1
這句法不關心什麼日子數據庫正在考慮周的第一天,它會計算你的@StartDate的實際周的星期一。
DATEADD(week, DATEDIFF(day, 0, @StartDate)/7, 0)
你可以用這個測試:
SELECT DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
這工作:
SELECT DATEPART(weekday, DATEADD(day, -1, CONVERT(DATETIME, @StartDate)))
另外,不要忘記先設置正確的日期格式:
SET DATEFORMAT ymd
你知道我是怎麼做到的?
SELECT max(cal_date)
FROM calendar
WHERE cal_date <= CURRENT_DATE
AND day_of_week = 'Mon'
沒有算術。快速,在我的舊箱子上運行.000082秒。日曆表是索引的;它可以有效地用於連接巨大的表格。
還有最重要的 - 你可以告訴查詢顯然是正確的。
並非所有數據庫都有一個名爲calendar的用戶定義表。 –
@ t-clausen.dk但更多的數據庫*應該*有一個日曆表。 –
你爲什麼要把你的日期時間存儲爲一個整數?的[獲取在SQL Server一週的第一天] –
可能重複(http://stackoverflow.com/questions/7168874/get-first-day-of-week-in-sql-server) –
@MartinSmith我們有很多有關如何獲得本週第一天的問題,但您鏈接到的那一天不適用於查找第一天。你可以在這裏測試我要求:設置DATEFIRST 7; SELECT [start_of_week] = DATEADD(WEEK,DATEDIFF(WEEK, '1900-01-01',CURRENT_TIMESTAMP-3), '1900-01-01'); –