Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ssis使用脚本组件添加数据库的年份截止日期_Ssis_Script Component - Fatal编程技术网

ssis使用脚本组件添加数据库的年份截止日期

ssis使用脚本组件添加数据库的年份截止日期,ssis,script-component,Ssis,Script Component,我有一个没有年份、只有日期和月份的数据库(示例20-12)。因此,数据库会自动添加年份。问题是,在某些情况下,年份提前了,例如20-12-2020年,而实际上是2019年 表格示例: 订单号订单日期(原始表格) 120-12 在ssms中添加数据库时的外观: 订单号订单日期 120-12-2020 我想做的是使用脚本组件为日期和月份添加正确的年份。例如,如果日期在过去,则将其设置为2019年。如果日期是在未来,则定为2020年 这将为您提供前进的道路。您只需将该列分为月和日: /

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

表格示例:

订单号订单日期(原始表格)
120-12

在ssms中添加数据库时的外观:

订单号订单日期 120-12-2020

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


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

        //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

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

将此公式用作类似于上述c#的公式:


我尝试了上面的代码,但出现了以下错误。请参见上面的屏幕截图。第一行代码中没有OrigCol的名称,但还有另一个问题。您的源是日期而不是字符串。我将修改我的答案,以满足2020年的日期,而不是字符串。非常感谢。这个解决方案对我帮助最大。
OrderDate > GETDATE() ? DATEADD("yy",-1,OrderDate) : OrderDate