根据文本的存在插入/转换为0或1

时间:2016-01-25 16:56:49

标签: sql-server ssis

我想插入一个表的位列0或1,0,其中没有文本,1有。我通过SSIS中的excel源提取数据。在下面的示例中,它应该:

Client 1: 1    1    1
Client 2: 1    0    1

它在excel中的表现如何:

Products:   Ball    Bicycle     Bat 

Client 1:   Ball    Bicycle     Bat

Client 2:   Ball                Bat

Client 3:   Ball

Client 4:           Bicycle     Bat     

在SSIS中实现这一目标的任何方法?

1 个答案:

答案 0 :(得分:1)

您需要使用一些项目来完成此任务。

如何向数据流任务添加新列?

派生列将允许您创建这些新的布尔列。派生列使用Expression来计算值。您需要在创建新列时指定列名称。您还需要确保数据类型符合预期。

我的表达是什么?

第一个是无文本是否为NULL,空字符串或填充字符串。知道当前行是否满足其中一个条件将告诉我们是否需要将新列1或0。

值为NULL或NOT NULL。如果它不为null,那么我们需要担心它是否为空/填充。我们通过ISNULL表达式测试NULL。

布尔OR表示为||

通过==

完成相等测试

我们使用LEN表达式检查空字符串。

我们需要从列中删除所有尾随空格,以查看它是否减少为空字符串。我们将使用RTRIM来完成此任务。

Expression必须求值,但我们有条件(if)逻辑。我们解决这个问题的方法是三元运算符(boolean test) ? (true expr) : (false expr)

布尔值的SSIS系统数据类型为DT_BOOL

演员表由(DT_TYPE) VALUE

执行

全部放在一起

将派生列组件添加到数据流中。列名为Col1HasText

为了便于阅读而添加了换行符

(isnull([Col1]) || LEN(RTRIM([Col1])) == 0) ? 
((DT_BOOL) 0) :
((DT_BOOL) 1) 

英文版:如果Col1为null或者Col1的右边裁剪版本的长度为零,那么我们要将一个数据类型转换为DT_BOOL(布尔值)。否则,将零转换为数据类型DT_BOOL