【问题标题】:ISNULL function in SSISSSIS 中的 ISNULL 函数
【发布时间】:2018-11-11 07:25:51
【问题描述】:

我有一个列 PhoneNumber varchar(50),我想根据以下内容为派生列 PhoneNumberType varchar(50) 构建一个表达式,

IF PhoneNumber <> NULL then
Set to ""Office""
Else
Set to NULL
END IF

我试过了

!ISNULL(PhoneNumber ) ? "Office" : PhoneNumber 

但我在将列映射为时遇到错误

Column PhoneNumberType 不能在 unicode 和 非 unicode 字符串数据类型

更新:我可以直接转到派生列组件的高级编辑器并在列属性中选择string [DT_STR] 而不是自动生成的unicode string [DT_WSTR] 数据类型吗?

这是一个好习惯吗?

【问题讨论】:

  • 试试这个!ISNULL(PhoneNumber ) ? (DT_WSTR)"Office" : PhoneNumber,或者如果你想要非unicode,那么反过来!ISNULL(PhoneNumber ) ? "Office" : NULL(DT_STR, 100, 1252)
  • @EzLo 我可以直接进入派生列组件的高级编辑器并在列属性中选择字符串 [DT_STR] 而不是自动生成的 Unicode 字符串 [DT_WSTR] 数据类型吗?
  • 如果您在派生列中创建新列,则结果类型是从您输入的表达式的结果中推断出来的。使用三元运算符 ? 时,两端必须返回相同的数据类型。您的错误可能会弹出,因为一个结果在 DT_STR 上,另一个在 DT_WSTR 上。另一方面,如果要替换派生列中的列,则数据类型必须保持不变。

标签: sql-server unicode ssis isnull non-unicode


【解决方案1】:

嗯, 下面是我想出的答案,ISNULL() 没有按照我的要求工作

PhoneNumber=="" || LEN(TRIM(PhoneNumber)) == 0 ? (DT_STR, 4, 1252)NULL(DT_STR, 4, 1252) : (DT_STR,50,1252)"Office"

【讨论】:

  • 您可以将PhoneNumber=="" || LEN(TRIM(PhoneNumber)) == 0 替换为TRIM(PhoneNumber)==""ISNULL 函数也不起作用,因为你有空字符串(它与 NULL 不同),我认为最好的解决方案是 ISNULL([PhoneNumber]) || PhoneNumber=="" 因为你必须检查空字符串和 NULL 值
  • 我编辑了另一个答案以满足您的要求,因为在您的问题中您没有提到您正在使用空字符串
【解决方案2】:

您可以使用以下表达式生成DT_STR 列,它还会检查空字符串:

ISNULL([PhoneNumber]) || TRIM(PhoneNumber) == "" ? NULL(DT_STR, 50, 1252) : (DT_STR,50,1252)"Office"

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 2017-06-03
    • 2011-06-09
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2013-08-07
    • 2010-09-15
    相关资源
    最近更新 更多