高级 Integration Services 表达式
本节提供了组合多个运算符和函数的高级表达式示例。如果表达式用于优先约束或条件性拆分转换中,则其计算结果必须为布尔值。但是,这一限制并不适用于属性表达式、变量、派生列转换或 For 循环容器中使用的表达式。
下列示例使用了 AdventureWorks 和 AdventureWorksDW Microsoft SQL Server 数据库。每个示例都标识了其使用的表。
布尔表达式
此示例使用 Product 表。表达式计算 SellStartDate 列中的月份项,如果月份为六月或更晚,则返回 TRUE。
DATEPART("mm",SellStartDate) > 6
此示例使用 Product 表。表达式计算 ListPrice 列被 StandardCost 列除后的舍入结果,如果结果大于 1.5,则返回 TRUE。
ROUND(ListPrice / StandardCost,2) > 1.50
此示例使用 Product 表。如果三个运算的计算结果都为 TRUE,则表达式返回 TRUE。如果 Size 列和 BikeSize 变量具有不兼容的数据类型,则表达式就需要进行显式转换,如第二个示例所示。到 DT_WSTR 的转换包括字符串的长度。
MakeFlag == TRUE && FinishedGoodsFlag == TRUE && Size != @BikeSize MakeFlag == TRUE && FinishedGoodsFlag == TRUE && Size != (DT_WSTR,10)@BikeSize
此示例使用 CurrencyRate 表。表达式比较表和变量中的值。如果 FromCurrencyCode 或 ToCurrencyCode 列中的项等于变量值,且 AverageRate 中的值大于 EndOfDayRate 中的值,则返回 TRUE。
(FromCurrencyCode == @FromCur || ToCurrencyCode == @ToCur) && AverageRate > EndOfDayRate
此示例使用 Currency 表。如果 Name 列的第一个字符不是 a 或 A,则表达式返回 TRUE。
SUBSTRING(UPPER(Name),1,1) != "A"
下列表达式提供相同的结果,但效率更高(因为只有一个字符被转换为大写)。
UPPER(SUBSTRING(Name,1,1)) != "A"
非布尔表达式
非布尔表达式用于派生列转换、属性表达式和 For 循环容器中。
此示例使用 Contact 表。表达式删除 FirstName、MiddleName 和 LastName 列中的前导空格和尾随空格。如果 MiddleName 列不为空,则提取其第一个字母,将该中间名首字母与 FirstName 和 LastName 中的值连接,并在值之间插入适当的空格。
TRIM(FirstName) + " " + (!ISNULL(MiddleName) ? SUBSTRING(MiddleName,1,1) + " " : "") + TRIM(LastName)
此示例使用 Contact 表。表达式验证 Salutation 列中的项。它返回 Salutation 项或空字符串。
(Salutation == "Sr." || Salutation == "Ms." || Salutation == "Sra." || Salutation == "Mr.") ? Salutation : ""
此示例使用 Product 表。表达式将 Color 列中的第一个字符转换为大写,并将其余字符转换为小写。
UPPER(SUBSTRING(Color,1,1)) + LOWER(SUBSTRING(Color,2,15))
此示例使用 Product 表。表达式计算产品的销售月份数,并在 SellStartDate 或 SellEndDate 列包含 NULL 时,返回字符串“Unknown”。
!(ISNULL(SellStartDate)) && !(ISNULL(SellEndDate)) ? (DT_WSTR,2)DATEDIFF("mm",SellStartDate,SellEndDate) : "Unknown"
此示例使用 Product 表。表达式计算 StandardCost 列上的加成,并将结果舍入到小数点后两位。结果以百分比表示。
ROUND(ListPrice / StandardCost,2) * 100
请参阅
任务
其他资源
Integration Services 表达式概念
运算符 (SSIS)
函数 (SSIS)