Insert/transform 到 0 或 1 基于文本的存在

Insert/transform to 0 or 1 based on presence of text

我想在 table 的位列中插入 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 中实现这一点?

您需要使用一些物品来完成此操作。

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

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

我的表情是什么?

首先是no text 是NULL、空字符串还是填充字符串。知道当前行是否满足这些条件之一将告诉我们是否需要将新列设为 1 或 0。

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

布尔或表示为||

通过 ==

进行相等性测试

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

我们需要从我们的列中删除所有尾随空格,看看它是否减少到一个空字符串。我们将使用 RTRIM 来完成此操作。

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

boolean 的 SSIS 系统数据类型是 DT_BOOL

演员由(DT_TYPE) VALUE

执行

综合起来

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

为了可读性添加了换行符

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

英文版:如果 Col1 为 null 或者 right-trimmed 版本的 Col1 的长度为零,那么我们要将 1 转换为 DT_BOOL(布尔值)的数据类型。否则,将零转换为 DT_BOOL

的数据类型