【问题标题】:ssis adding year to date of database with script componentssis 使用脚本组件添加数据库的年份
【发布时间】:2020-06-29 13:21:52
【问题描述】:

我有一个没有年份、只有日期和月份的数据库(例如 20-12)。因此,数据库会自动添加年份。这样做的问题是,在某些情况下,这一年会提前,例如 20-12-2020,而实际上是 2019 年。

表格示例:

order_number date_of_order(原始表)
1 20-12

当我在 ssms 中添加数据库时的样子:

order_number date_of_order 1 20-12-2020

我想要做的是使用脚本组件将正确的年份添加到日期和月份。例如,如果日期是过去,则设为 2019。如果日期在未来,则设为 2020。

【问题讨论】:

    标签: ssis script-component


    【解决方案1】:

    如果您已经从日期开始,那么您可以使用派生列进行转换:

    将其用作类似于上面c#的公式:

    OrderDate > GETDATE() ? DATEADD("yy",-1,OrderDate) : OrderDate
    

    【讨论】:

    • 非常感谢。这个解决方案对我帮助最大。
    【解决方案2】:

    这将为您提供前进的道路。您只需要将列分隔为月份和日期:

            //This will split out your date/month
            string OrigCol = "20-12"; //Replace this with Rows.YourColumnName
            string[] col = OrigCol.Split('-');
            int d = Int32.Parse(col[0]);
            int m = Int32.Parse(col[1]);
    
            DateTime dt = new DateTime(DateTime.Now.Year, m, d);
            if (dt > DateTime.Now)
                dt = dt.AddYears(-1);
    
            //Set your new column to dt
    

    此代码将创建一个带有当前年份的日期,如果结果是未来,则仅减去一年。

    如果您的列已经是日期(默认为 2020),您可以直接跳到 if。

            DateTime dt = Row.YourColumnName;
            if (dt > DateTime.Now)
                dt = dt.AddYears(-1);
    
            //Set your new column to dt
    

    【讨论】:

    • 我尝试了上面的代码,但我得到了以下错误。见上面的截图。
    • 名称 OrigCol 不在您的第一行代码中,但还有另一个问题。您的来源是日期而不是字符串。我会修改我的答案,以迎接一个总是 2020 年而不是字符串的日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多