#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:
Это может быть достигнуто с STR_TO_DATE
помощью: http://www.java2s.com/Tutorial/MySQL/0280__Date-Time-Functions/Toconvertayearweektoadatethenyoushouldalsospecifytheweekday.htm
Комментарии:
1. Спасибо, но это не mysql