Преобразовать 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)