在 SQL 将 ISO 周日期转换为月日期
Conver to ISO week to month date on SQL
我几乎搜索了每个问题,但没有找到我需要的,所以这里是:
我需要将格式为 'yyyyww' 的日期(其中 'ww' 是一年中的第几周)转换为 'yyyymm'(其中 'mm' 是一年中的月份)。
因此,例如,我将日期 201725(即 2017 年,ISO 第 25 周)显示为 201706,因为 ISO 第 25 周是在同年的 6 月。
这对于输出来说有点奇怪,因为您可以在超过 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)
结合使用 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/#!6/00eaa/7/0
我几乎搜索了每个问题,但没有找到我需要的,所以这里是:
我需要将格式为 'yyyyww' 的日期(其中 'ww' 是一年中的第几周)转换为 'yyyymm'(其中 'mm' 是一年中的月份)。
因此,例如,我将日期 201725(即 2017 年,ISO 第 25 周)显示为 201706,因为 ISO 第 25 周是在同年的 6 月。
这对于输出来说有点奇怪,因为您可以在超过 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)
结合使用 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/#!6/00eaa/7/0