如何将日期列更改为两个单独的列,MONTH和YEAR

时间:2013-07-19 01:29:08

标签: sql sql-server ssis

我正在导入一个日期列标有StartDate的电子表格(01/01/2000) 我需要将其拆分为两列,一列是Month,另一列是Year

Month必须是月份名称(Jan,Feb等),另一个是简单的4位数年份。

我想通过SSIS包来做到这一点。

我曾尝试使用某些日期表达式创建派生列,但我无法按照我需要的方式工作。

有没有人对什么是正确的脚本有任何想法?

谢谢。

1 个答案:

答案 0 :(得分:1)

我假设StartDate具有Date-ish数据类型,并且已作为字符串导入(DT_STR或DT_WSTR)。

将派生列添加到数据流中。给它命名,比如StartMonth,并使用像MONTH([StartDate])这样的表达式。

添加第二个派生列,将其命名为StartYear并使用类似YEAR([StartDate])的表达式

It works

由于我无法阅读,你要求提供月份名称。这有点丑陋,因为没有内置的表达式功能。

您可以使用Ternary Operatior (test) ? true : false编写自己的,但这种方法的局限在于表达式编辑器对于长表达式来说很麻烦。

([StartMonth]==1)?"January":([StartMonth]==2)? "February" : ([StartMonth]==3)? "March" : "Etc"

另一种方法是使用脚本任务。在“行”选项卡中,选中我们的StartDate列作为只读输入。在Output中,添加一个名为StartMonthName的新列,类型为String length 3(如果您只想要3个字母的缩写)。如果您已经在使用脚本任务,则可以通过从此处添加StartMonth来消除派生列调用。

Row.StartMonthName = Row.StartDate.ToString("MMM");
Row.StartMonth = Row.StartDate.Month;