表达式中的数据类型转换

数据转换有两种类型:

  • 隐式转换,在该转换中表达式计算器可以自动将数据从一种数据类型转换为另一种数据类型。例如,如果将 smallintint 比较,则 smallint 便会在执行比较前被隐式转换为 int
  • 显式转换,在该转换中使用转换将值(如局部变量、列或其他表达式)从一种数据类型转换为另一种数据类型。有关详细信息,请参阅Cast (SSIS)

以下关系图显示了 BINARY 运算的隐式转换的结果类型。该表中列和行的交集为二元运算的结果类型,该运算中操作数的类型为左 (From) 和右 (To)。

数据类型之间的隐式数据类型转换

有符号整数和无符号整数的交集是可能大于这两者中任何一个的有符号整数。

兼具无符号八字节整数和有符号整数的运算需要显式转换才能使结果格式清楚明了。

使用单个参数的函数将返回与参数具有相同数据类型的结果,但下列情况除外:

  • DAY、MONTH 和 YEAR 接受日期并返回一个整数 (DT_I4) 结果。
  • ISNULL 接受任意 SSIS 数据类型的表达式,并返回一个布尔值 (DT_BOOL) 结果。
  • SQUARE 和 SQRT 接受数值表达式,并返回一个非整型数值 (DT_R8) 结果。

如果参数具有相同的数据类型,则结果即为该类型。唯一的例外是,如果对两个 DT_DECIMAL 数据类型的值执行二进制操作,则它将返回 DT_NUMERIC 数据类型的结果。

函数还可比较字符串、日期和布尔值。在函数比较两个值之前,表达式计算器会执行下列隐式转换:

  • DT_STR 数据类型的字符串转换为 DT_WSTR 数据类型。
  • 日期和时间值转换为 DT_DBTIMESTAMP 数据类型。

表达式计算器无法将任何值隐式转换为布尔值。相反,表达式必须包含显式转换操作。有关详细信息,请参阅Cast (SSIS)

ms141260.note(zh-cn,SQL.90).gif注意:
布尔值是逻辑值而非数字。虽然布尔值在某些环境中可能显示为数字,但它们并非以数字形式存储,而且不同的编程语言以不同的数值表示布尔值,.NET Framework 方法也是如此。 例如,Visual Basic 中可用的转换函数将 True 转换为 -1;但是 .NET Framework 中的 System.Convert.ToInt32 方法将 True 转换为 +1。Integration Services 表达式语言将 True 转换为 -1。 若要避免错误或意外结果,不应编写依赖 TrueFalse 为特定数值的代码。如果可能,应将布尔变量的使用限制为与其设计意图对应的逻辑值。

表达式可使用数据类型不兼容的参数和操作数,在这种情况下,表达式计算器无法执行隐式数据转换。例如,表达式计算器不允许将字符串数据类型的操作数和数值数据类型的操作数进行比较。若要执行此比较,必须将数值操作数显式转换为字符串数据类型。表达式语言包含支持在字符串、数值、日期和二进制数据类型之间进行转换的转换运算符。有关详细信息,请参阅Cast (SSIS)

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

更改的内容:
  • 提供了有关使用布尔值的提示。

请参阅

其他资源

Integration Services 表达式概念

帮助和信息

获取 SQL Server 2005 帮助