获取以周为单位的差异,数据在 TSQL 中存储为 YYYYWW
Get the difference in weeks, data stored as YYYYWW in TSQL
我将 customer_since 存储为 YYYYWW
即 201852。
下面的脚本是我用来计算差异的脚本,但是当我遇到 201901 - 201852 这种情况时,它给出的是 48 而不是 1。
是否有 mod 功能或可以合并到此处以解决问题的东西?
CAST(CONCAT (DATEPART(YEAR, DATEADD(MONTH, + 9, GETDATE()))
, RIGHT('0' + RTRIM(DATEPART(WEEK, DATEADD(MONTH, - 3, GETDATE()))+1),2)
) AS INT) - a.customer_since AS Customer_since
您可以使用以下模板获取给定年份和星期的第一个(或最后一个)日期。然后具有有效的日期时间,只需使用 DATEDIFF 因为它具有内置功能以获得周差:
DECLARE @WeekNo int= 52
DECLARE @Year int=2018
SELECT DATEADD(wk,@WeekNo-1,DATEADD(yy,@Year-1900,0)) AS WeekStart,
DATEADD(wk,@WeekNo,DATEADD(yy,@Year-1900,0))-1 AS WeekEnd
GO
DECLARE @WeekNo int= 1
DECLARE @Year int=2019
SELECT DATEADD(wk,@WeekNo-1,DATEADD(yy,@Year-1900,0)) AS WeekStart,
DATEADD(wk,@WeekNo,DATEADD(yy,@Year-1900,0))-1 AS WeekEnd
GO
SELECT DATEDIFF(WEEK, '2018-12-24 00:00:00.000', '2019-01-01 00:00:00.000')
在一个声明中:
DECLARE @Input01 VARCHAR(6) = '201852'
,@Input02 VARCHAR(6) = '201901'
SELECT DATEDIFF(WEEK, DATEADD(WEEK, RIGHT(@Input01, 2)-1,DATEADD(YEAR,LEFT(@Input01, 4)-1900,0)), DATEADD(WEEK,RIGHT(@Input02, 2)-1,DATEADD(YEAR,LEFT(@Input02, 4)-1900,0)));
您可以创建一个函数,它将接受日期字符串 ('201852') 并将 return 像`Create Function Todate(@dt varchar(100)) 这样的日期
returns 日期
开始
声明@wk int=(Select RIGHT(@dt,2))
return (Select Dateadd(WK, @wk, cast(LEFT(@dt,4) as date)))
结束`
现在您所要做的就是在函数中传递日期字符串并找到一个包含开始和结束日期的 DATEDIFF
我将 customer_since 存储为 YYYYWW
即 201852。
下面的脚本是我用来计算差异的脚本,但是当我遇到 201901 - 201852 这种情况时,它给出的是 48 而不是 1。 是否有 mod 功能或可以合并到此处以解决问题的东西?
CAST(CONCAT (DATEPART(YEAR, DATEADD(MONTH, + 9, GETDATE()))
, RIGHT('0' + RTRIM(DATEPART(WEEK, DATEADD(MONTH, - 3, GETDATE()))+1),2)
) AS INT) - a.customer_since AS Customer_since
您可以使用以下模板获取给定年份和星期的第一个(或最后一个)日期。然后具有有效的日期时间,只需使用 DATEDIFF 因为它具有内置功能以获得周差:
DECLARE @WeekNo int= 52
DECLARE @Year int=2018
SELECT DATEADD(wk,@WeekNo-1,DATEADD(yy,@Year-1900,0)) AS WeekStart,
DATEADD(wk,@WeekNo,DATEADD(yy,@Year-1900,0))-1 AS WeekEnd
GO
DECLARE @WeekNo int= 1
DECLARE @Year int=2019
SELECT DATEADD(wk,@WeekNo-1,DATEADD(yy,@Year-1900,0)) AS WeekStart,
DATEADD(wk,@WeekNo,DATEADD(yy,@Year-1900,0))-1 AS WeekEnd
GO
SELECT DATEDIFF(WEEK, '2018-12-24 00:00:00.000', '2019-01-01 00:00:00.000')
在一个声明中:
DECLARE @Input01 VARCHAR(6) = '201852'
,@Input02 VARCHAR(6) = '201901'
SELECT DATEDIFF(WEEK, DATEADD(WEEK, RIGHT(@Input01, 2)-1,DATEADD(YEAR,LEFT(@Input01, 4)-1900,0)), DATEADD(WEEK,RIGHT(@Input02, 2)-1,DATEADD(YEAR,LEFT(@Input02, 4)-1900,0)));
您可以创建一个函数,它将接受日期字符串 ('201852') 并将 return 像`Create Function Todate(@dt varchar(100)) 这样的日期 returns 日期 开始 声明@wk int=(Select RIGHT(@dt,2))
return (Select Dateadd(WK, @wk, cast(LEFT(@dt,4) as date))) 结束`
现在您所要做的就是在函数中传递日期字符串并找到一个包含开始和结束日期的 DATEDIFF