Jib*_*hew 3 sql sql-server sql-date-functions
yyyyww我正在尝试以 、等格式获取年份数和周数201901,201905并且201911我正在使用此查询来执行此操作:
declare @BeginDate datetime
set @beginDate = '2019-02-07'
select
concat(datepart(year, @BeginDate), right('0' + convert(varchar, datepart(week, dateadd(day, -7 , @BeginDate))), 2))
Run Code Online (Sandbox Code Playgroud)
直到 2018 年 12 月,这种方式都运行良好。但是当我尝试这个日期时2019-01-07,它返回的201953结果不正确。但对于所有其他值,如 2019-01-14 等,它会正确获取周数。
那么如何才能准确获取全年的年周数字组合
您没有考虑“年周”定义:
根据维基百科: 第一年的一周是指包含该年第一个星期四的那一周,或者包含 1 月 4 日的那一周,或者从 12 月 29 日到 1 月 4 日之间开始的那一周。
因此,如果一年从第 52 或 53 周开始,则该周是上一年最后一周的尾数。
所以你有了:
set dateformat ymd
set datefirst 1
declare @data as datetime
declare @year as int
set @data = cast('2017-01-01' as datetime)
set @year = case when datepart(iso_week,@data) >= 52 and month(@data) = 1
then year(@data)-1
when datepart(iso_week,@data) = 1 and month(@data) = 12
then year(@data)+1
else year(@data) end
select concat (@year, right('0'+cast(datepart(iso_week,@data) as varchar(6)),2))
Run Code Online (Sandbox Code Playgroud)
结果是201652
编辑:更新为始终具有两位数的周数