【问题标题】:What is ISO_year in sql-server什么是 sql-server 中的 ISO_year
【发布时间】:2014-05-14 19:23:08
【问题描述】:

我目前正在创建我的第一个Data_warehouse using sql-server

我有一个 Date dimension 我想使用 SSIS 填充它,它有一个名为 ISO_year 的字段

谁能告诉我如何获得它?

我试过这个查询::

select year(getdate()) -- 但我不认为这是 ISO_year 吗?

我需要知道使用 ssis 将维度加载到数据库中的最佳做法是什么?

我转发了这个http://michaelmorley.name/how-to/create-date-dimension-table-in-sql-server

【问题讨论】:

  • 您的“规范”对 ISO_Year 有何评价?谁建表并给它一个名为 ISO_Year 的列?日期维度是日期的大列表。如果您的日期列(唯一)称为 MyDate,则 ISO_Year 可能是 YEAR(MyDate)。无论记录的日期是什么,我想 ISO_Year 都是它所属的年份。
  • @ElectricLlama 令人惊讶的是,ISO 年不一定是一年 - 根据答案。我也很惊讶;)
  • 有兴趣知道!我想这不会是一个日历年。

标签: sql-server


【解决方案1】:

这里有一个iso_year的函数,其背后的逻辑是从参数date开始的星期几决定年份:

CREATE FUNCTION [dbo].[f_isoyear]
(
@p_date datetime
)
RETURNS int
as
BEGIN
  RETURN datepart(yy, dateadd(wk, datediff(d, 0, @p_date)/7, 3))
END

【讨论】:

【解决方案2】:

这是一个连接项,它请求一个函数来计算 ISO_YEAR。

DATEPART - ISO_YEAR for ISO_WEEK

在解决方法部分,您可以使用此功能。

CREATE FUNCTION [dbo].[ISOyear](@date DATETIME)
returns SMALLINT
AS
BEGIN
     DECLARE @isoyear SMALLINT = CASE
         WHEN Datepart(isowk, @date)=1
             AND Month(@date)=12 THEN Year(@date)+1
         WHEN Datepart(isowk, @date)=53
             AND Month(@date)=1 THEN Year(@date)-1
         WHEN Datepart(isowk, @date)=52
             AND Month(@date)=1 THEN Year(@date)-1             
         ELSE Year(@date)
        END;
     RETURN @isoyear;
END;

【讨论】:

  • +1。接得好。我什至不知道 ISO-Date 功能,但一旦你阅读它就会很有意义。
  • 谢谢......但是如何使用它......我的意思是我正在这样做insert into dateky,ddat,iso_year values(something,getdate(),<here what i should do>)
  • @user3425160 我现在看到您实际上已经问了两个问题。 “而且我需要知道使用 ssis 将维度加载到数据库中的最佳做法是什么?”对不起,我不能帮你。这个带有代码的答案解释了 ISO_YEAR 是什么以及它与常规 YEAR 有何不同。
  • +1) 如何在我的插入语句中调用函数?
  • 您像 dbo.ISOyear(SomeDate) 这样调用函数,其中 SomeDate 是您要为其计算 ISO_YEAR 的日期值。您实际上并不需要该功能。您可以直接在插入语句中使用 case 表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多