重複の可能性:
T-SQL で週番号から日付を取得する
SQL クエリに週番号がある場合、日付の値を取得するにはどうすればよいですか。
たとえば、26 を渡すと、2012 年 6 月 24 日になります。27 を渡すと、07/01/2012 になるはずです
どんな助けでも大歓迎です:)
ソッツ
重複の可能性:
T-SQL で週番号から日付を取得する
SQL クエリに週番号がある場合、日付の値を取得するにはどうすればよいですか。
たとえば、26 を渡すと、2012 年 6 月 24 日になります。27 を渡すと、07/01/2012 になるはずです
どんな助けでも大歓迎です:)
ソッツ
これにより、週の開始日と終了日がわかります。[SQLServerの場合]
Declare @week integer set @week = 26
Declare @Year Integer Set @Year = year(getdate())
declare @date datetime
-- ------------------------------------
Set @date = DateAdd(day, 0,
DateAdd(month, 0,
DateAdd(Year, @Year-1900, 0)))
set @date = Dateadd(week, @week-1, @date)
select @date startweek, DATEADD (D, -1 * DatePart (DW, @date) + 7, @date) endweek
これはそれからの結果でした:
startweek endweek
----------------------- -----------------------
2012-07-01 00:00:00.000 2012-07-07 00:00:00.000
(1 row(s) affected)
SQL Server で
DECLARE @StartDate DATE, @WeekVal INT
SET @WeekVal = 26 -- Set the week number
SET @StartDate = DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) -- Start of current year
;WITH cte AS (
SELECT @StartDate AS DateVal, DATEPART(wk, @StartDate) AS WeekVal, 1 AS RowVal
UNION ALL
SELECT DATEADD(d, 1, DateVal), DATEPART(wk, DATEADD(d, 1, DateVal)), RowVal + 1
FROM cte WHERE RowVal < 365
)
SELECT MIN(DateVal) StartOfWeek
FROM cte
WHERE WeekVal = @WeekVal
OPTION (MAXRECURSION 365);
SELECT DATEADD(week, n, '11/25/2011');
n は週番号です。
これが機能しない場合は、WEEK()
代わりに を使用してみてくださいWEEKOFYEAR()
。
CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY + INTERVAL (WEEKNO - WEEKOFYEAR(CURDATE())) WEEK