Преобразовать ISO в недельную дату в SQL

Я искал почти каждый вопрос, но не пришел с тем, что мне нужно, так что вот оно:

Мне нужно преобразовать дату в формате "гггг" (где "ww" - неделя года) в "ггггмм" (где "мм" - месяц года).

Так, например, у меня есть дата 201725 (это год 2017, неделя ИСО 25), которая должна отображаться как 201706, поскольку неделя 25 ИСО приходится на июнь того же года.

2 ответа

Решение

Используйте комбинацию LEFT, CONVERT & DATEADD Функции.

SELECT LEFT(CONVERT(varchar, DATEADD(week, yourfield % 100 - 1, DATEADD(year, yourfield / 100 - 1900, 0)),112),6)
FROM yourtable

вход

201722
201733
201725

Выход

201705
201708
201706

SQL Fiddle: http://sqlfiddle.com/

Это немного странно для вывода, потому что вы можете получить одно и то же значение в течение более 1 недели, но я оставлю это на ваше усмотрение, чтобы разобраться.

Это приводит к желаемому выводу, указанному для предоставленного ввода.

declare @YourValue varchar(10) = '201725'

select left(replace(convert(varchar(10), dateadd(week, convert(int, right(@YourValue, 2)), left(@YourValue, 4) + '0101'), 102), '.', ''), 6)
Другие вопросы по тегам