首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -如何使用ISO周获得年度周?

SQL -如何使用ISO周获得年度周?
EN

Stack Overflow用户
提问于 2021-10-28 14:21:12
回答 1查看 272关注 0票数 2

我想要一年的星期数(f.i ).( 2021-01)使用ISO周计数。我确实使用以下代码将它们分开:

IsoWeek:

代码语言:javascript
复制
(datepart(ISOWK, [Date])) 

IsoYearNumber:

代码语言:javascript
复制
YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date]))

但是,当我尝试使用下面的行将它们组合成YYYY格式时,我将得到类似于2020年WK 53的2073这样的奇怪值。

代码语言:javascript
复制
(YEAR(DATEADD(day, 26 - DATEPART(isoww, [Date]), [Date]))) + '-' + (datepart(ISOWK, [Date])) 

我应该在上面的行中更改什么来获得YYYY格式的ISO年和周?谢谢你提前提供帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-28 14:33:08

使用CONCAT函数。+是that中的加法算子级联算子;也就是说,它取决于围绕它的数据。在这里,它被推断为加法运算符,而不是级联运算符,因为查询中的数据是int值,因此'-'也被隐式转换为int ('-'作为int0)。

如果使用当前日期,则表达式如下:

代码语言:javascript
复制
(YEAR(DATEADD(day, 26 - DATEPART(isoww, '20211028'), '20211028'))) + '-' + (datepart(ISOWK, '20211028'))

返回2064。这是因为它决定采用2021 + '-' + 43 = 2021 + 0 + 43 = 2064

如果使用CONCAT,您将得到所需的内容,这将首先隐式地将每个值转换为基于字符串的数据类型:

代码语言:javascript
复制
SELECT CONCAT((YEAR(DATEADD(day, 26 - DATEPART(ISOWEEK, '20211028'), '20211028'))), '-', (DATEPART(ISOWEEK, '20211028')));

我还使您的大小写保持一致,并对date部分使用相同的关键字ISOWEEK__,因为您不一致地使用isowwISOWK__。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69755828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档