SQL server извлекает дату начала недели и дату окончания недели из номера недели и года

#sql #sql-server

#sql #sql-server

Вопрос:

Мне нужно получить дату начала и окончания недели за год.

Это мой вклад:

 YEAR = 2019 WEEK = 32
  

Результатом будет: 05/08/2019 и 11/08/2019 .

Я попробовал это:

 select (dateadd(week,32-(1),dateadd(week,datediff(week,(-1),dateadd(year,datediff(year,(0),getdate()),(0))),(0))))
select (dateadd(week,32 datediff(week,(0),dateadd(year,datediff(year,(0),getdate()),(0))),(-1)))
  

но ввод года отсутствует, поэтому он будет работать только для текущего года
Мне нужно поместить эту функцию в вычисляемые поля, создавая таблицу

Комментарии:

1. Существуют разные определения нумерации недель. Вы знаете, какой у вас есть?

2. Вы также можете рассмотреть возможность создания таблицы календаря, поэтому вы просто делаете это как поиск.

3. Я не хочу создавать таблицу календаря, мне это не нужно

Ответ №1:

Одним из возможных вариантов является следующее утверждение:

 DECLARE @year int = 2019
DECLARE @week int = 32
DECLARE @date date

SELECT @date = DATEADD(week, (@week - 1), DATEFROMPARTS(@year, 1, 1))
SELECT
   @date AS CurrentDay,
   DATEADD(day, - DATEPART(weekday, @date)   1, @date) AS StartOfTheWeek,
   DATEADD(day, 7 - DATEPART(weekday, @date), @date) AS EndOfTheWeek
  

Результат:

 CurrentDay  StartOfTheWeek  EndOfTheWeek
2019-08-06  2019-08-05      2019-08-11
  

Если вы хотите определить таблицу с вычисляемыми столбцами:

 CREATE TABLE Data (
    [Year] int,
    [Week] int,
    [Start_Date] AS DATEADD (
        day, 
        - DATEPART(weekday, DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1)))   1, 
        DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))
    ),
    [End_Date] AS DATEADD (
        day, 
        7 - DATEPART(weekday, DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))),
        DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))
    )
)

INSERT INTO Data ([Year], [Week])
VALUES (2019, 32)
  

Комментарии:

1. Спасибо, но мне это нужно для встроенной функции в качестве вычисляемого поля

2. @img.simone Каково определение таблицы и каков ожидаемый результат выполнения функции? Спасибо.

3. Определение таблицы: YEAR, WEEK, START_DATE, END_DATE . Последние два поля должны быть вычислены. Результат тот же, который вы предложили

4. мне нужно использовать эту функцию в вычисляемом поле. Ваше решение может быть отличным, но для меня бесполезным

5. @img.simone Что вы хотите — определить функцию и использовать эту функцию в вычисляемом поле? Или что-то еще? Если возможно, обновите вопрос дополнительными пояснениями. Спасибо.

Ответ №2:

Комментарии:

1. Спасибо, но это не mysql