SQL - 如何使用 ISO 周获得年-周?
SQL - How to get the Year-Week using the ISO weeks?
我想使用 ISO 周计数获得年数 - 周数 (f.i.2021-01)。
我确实设法使用以下代码将它们分开:
IsoWeek:
(datepart(ISOWK, [Date]))
IsoYearNumber:
YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date]))
但是,当我尝试使用下面的行将它们组合成 YYYY-WW 格式时,我会得到奇怪的值,例如 2073 表示 2020 WK 53。
(YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date]))) + '-' + (datepart(ISOWK, [Date]))
我应该在上面的行中更改什么以获取 YYYY-WW 格式的 ISO 年和周?
提前感谢您的帮助!
使用CONCAT
函数。 +
是两者T-SQL中的addition operator and concatenation operator;它被推断为取决于它周围的数据。这里它被推断为加号运算符,而不是连接运算符,因为查询中的数据是 int
值,因此 '-'
也被隐式转换为 int
( '-'
因为 int
是 0
).
如果我们使用当前日期,我们有以下表达式:
(YEAR(DATEADD(day, 26 - DATEPART(isoww, '20211028'), '20211028'))) + '-' + (datepart(ISOWK, '20211028'))
其中 returns 2064
。那是因为它解析为 2021 + '-' + 43 = 2021 + 0 + 43 = 2064
.
如果你使用 CONCAT
你会得到你想要的,它首先将每个值隐式转换为基于字符串的数据类型:
SELECT CONCAT((YEAR(DATEADD(day, 26 - DATEPART(ISOWEEK, '20211028'), '20211028'))), '-', (DATEPART(ISOWEEK, '20211028')));
我也让你的大小写保持一致,并为日期部分使用相同的关键字,ISOWEEK
,因为你不一致地使用 isoww
和 ISOWK
。
我想使用 ISO 周计数获得年数 - 周数 (f.i.2021-01)。 我确实设法使用以下代码将它们分开:
IsoWeek:
(datepart(ISOWK, [Date]))
IsoYearNumber:
YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date]))
但是,当我尝试使用下面的行将它们组合成 YYYY-WW 格式时,我会得到奇怪的值,例如 2073 表示 2020 WK 53。
(YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date]))) + '-' + (datepart(ISOWK, [Date]))
我应该在上面的行中更改什么以获取 YYYY-WW 格式的 ISO 年和周? 提前感谢您的帮助!
使用CONCAT
函数。 +
是两者T-SQL中的addition operator and concatenation operator;它被推断为取决于它周围的数据。这里它被推断为加号运算符,而不是连接运算符,因为查询中的数据是 int
值,因此 '-'
也被隐式转换为 int
( '-'
因为 int
是 0
).
如果我们使用当前日期,我们有以下表达式:
(YEAR(DATEADD(day, 26 - DATEPART(isoww, '20211028'), '20211028'))) + '-' + (datepart(ISOWK, '20211028'))
其中 returns 2064
。那是因为它解析为 2021 + '-' + 43 = 2021 + 0 + 43 = 2064
.
如果你使用 CONCAT
你会得到你想要的,它首先将每个值隐式转换为基于字符串的数据类型:
SELECT CONCAT((YEAR(DATEADD(day, 26 - DATEPART(ISOWEEK, '20211028'), '20211028'))), '-', (DATEPART(ISOWEEK, '20211028')));
我也让你的大小写保持一致,并为日期部分使用相同的关键字,ISOWEEK
,因为你不一致地使用 isoww
和 ISOWK
。