SQL 获取 ISO 周的 "ISO Year"

标签 sql sql-server tsql date

我需要计算一周分配到的年份。例如,2003 年 12 月 29 日被指定为 2004 年的第一周(我认为这仅适用于欧洲)。您可以使用以下代码来查看:

SELECT DATEPART(isowk, '20141229');

但现在我需要一种简单的方法来获取本周分配的年份。我目前所做的并不是那么优雅:

DECLARE @week int, @year int, @date char(8)

--set @date = '20150101'
set @date = '20141229'


SET @week = cast(datepart(isowk, @date) as int)

if @week = 1
begin
      if DATEPART(MONTH, @date) = 12
      begin
            set @year = DATEPART(year, @date) + 1
      end
      else
      begin
            set @year = DATEPART(year, @date)
      end
end

select @date "DATE", @week "WEEK", @year "YEAR"

如果有人知道更优雅的方式,那就太好了:-)

最佳答案

此解决方案问题中的代码未返回日期'1-1-2027'的正确值。

以下内容将返回我测试的所有日期的正确值(我测试了相当多的日期)。

SELECT YEAR(DATEADD(day, 26 - DATEPART(isoww, '2012-01-01'), '2012-01-01'))

取自:https://capens.net/content/sql-year-iso-week

关于SQL 获取 ISO 周的 "ISO Year",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26926271/

相关文章:

c# - Entity Framework ,代码优先 : How can i make a Foreign Key Not-Nullable

mysql - 如何为每个对话选择最后一条消息?

sql-server - sql存储过程参数作为动态查询的参数

sql - 改变表然后更新

sql-server - sql中将varchar值转换为int数据类型时转换失败

mysql - SQL时间范围查询

sql - 将 2 个复杂的 GROUP BY/PARTITION BY 查询调整为 1 个查询

mysql - 将查询的所有结果插入表中

c# - 如何知道 TriggerContext 当前更新的表?

SQL Server 2012 - 生成脚本 - 保存到文件 = 不运行