Expresiones avanzadas de Integration Services
Esta sección proporciona ejemplos de expresiones avanzadas que combinan varios operadores y varias funciones. Si se usa una expresión en una restricción de precedencia o en la transformación División condicional, su evaluación debe devolver un valor booleano. Sin embargo, esta restricción no se aplica a las expresiones usadas en expresiones de propiedades, variables, la transformación Columna derivada o el contenedor de bucles For.
Los ejemplos siguientes usan la base de datos AdventureWorks2008R2. Cada ejemplo identifica las tablas que utiliza.
Expresiones booleanas
En este ejemplo se utiliza la tabla Product. La evaluación de la expresión busca la entrada del mes en la columna SellStartDate y devuelve TRUE si el mes es junio o un mes posterior.
DATEPART("mm",SellStartDate) > 6
En este ejemplo se utiliza la tabla Product. La expresión evalúa el resultado redondeado de dividir la columna ListPrice por la columna StandardCost y devuelve TRUE si el resultado es mayor que 1,5.
ROUND(ListPrice / StandardCost,2) > 1.50
En este ejemplo se utiliza la tabla Product. La expresión devuelve TRUE si las tres operaciones devuelven TRUE. Si la columna Size y la variable BikeSize tienen tipos de datos incompatibles, la expresión requiere una conversión explícita, como se indica en el segundo ejemplo. La conversión a DT_WSTR incluye la longitud de la cadena.
MakeFlag == TRUE && FinishedGoodsFlag == TRUE && Size != @BikeSize MakeFlag == TRUE && FinishedGoodsFlag == TRUE && Size != (DT_WSTR,10)@BikeSize
En este ejemplo se utiliza la tabla CurrencyRate. La expresión compara valores de tablas y variables. Devuelve TRUE si las entradas de la columna FromCurrencyCode o ToCurrencyCode son iguales a los valores de la variable y si el valor de AverageRate es mayor que el valor de EndOfDayRate.
(FromCurrencyCode == @FromCur || ToCurrencyCode == @ToCur) && AverageRate > EndOfDayRate
En este ejemplo se utiliza la tabla Currency. La expresión devuelve TRUE si el primer carácter de la columna Name no es a ni A.
SUBSTRING(UPPER(Name),1,1) != "A"
La siguiente expresión proporciona los mismos resultados, pero es mucho más eficaz porque solo se convierte a mayúsculas un carácter.
UPPER(SUBSTRING(Name,1,1)) != "A"
Expresiones no booleanas
Las expresiones no booleanas se usan en la transformación Columna derivada, en expresiones de propiedades y en el contenedor de bucles For.
En este ejemplo se utiliza la tabla Person. La expresión quita los espacios iniciales y finales de las columnas FirstName, MiddleName y LastName. Extrae la primera letra de la columna MiddleName si no es NULL, concatena la inicial del segundo nombre y los valores de FirstName y LastName, e inserta los espacios apropiados entre los valores.
TRIM(FirstName) + " " + (!ISNULL(MiddleName) ? SUBSTRING(MiddleName,1,1) + " " : "") + TRIM(LastName)
En este ejemplo se utiliza la tabla Person. La expresión valida las entradas de la columna Title. Devuelve una entrada Title o una cadena vacía.
(Title == "Sr." || Title == "Ms." || Title == "Sra." || Title == "Mr.") ? Title : ""
En este ejemplo se utiliza la tabla Product. La expresión convierte el primer carácter de la columna Color a mayúsculas y convierte los demás caracteres a minúsculas.
UPPER(SUBSTRING(Color,1,1)) + LOWER(SUBSTRING(Color,2,15))
En este ejemplo se utiliza la tabla Product. La expresión calcula el número de meses que se ha vendido un producto y devuelve la cadena "Unknown" si las columnas SellStartDate o SellEndDate contienen NULL.
!(ISNULL(SellStartDate)) && !(ISNULL(SellEndDate)) ? (DT_WSTR,2)DATEDIFF("mm",SellStartDate,SellEndDate) : "Unknown"
En este ejemplo se usa la tabla Product. La expresión calcula el margen de beneficio de la columna StandardCost y redondea el resultado a una precisión de dos. El resultado se presenta como un porcentaje.
ROUND(ListPrice / StandardCost,2) * 100