A moral da história a seguir é que só porque você pode fazer algo no SSIS, nem sempre é uma boa ideia.
Caso em questão, esta consulta. Seria muito mais eficiente usar a lógica sql existente para gerar o valor final do que usar colunas derivadas ou uma tarefa de script no SSIS (sem mencionar o desperdício de memória do pipeline, CPU etc.)
Consulta de origem
Eu usei o seguinte como uma consulta de origem.
SELECT '50%' AS FixedARMRateReductionLimit, .1 AS PARAM_VAL_TXT
UNION ALL SELECT 'Weekly PMMS Rate' AS FixedARMRateReductionLimit, .3 AS PARAM_VAL_TXT
UNION ALL SELECT 'Frack', .5
Encontrar posição percentual
Determine se existe um símbolo de porcentagem na coluna. Isso cria uma coluna chamada
PercentPosition
FINDSTRING(FixedARMRateReductionLimit, "%",1)
Verifique o texto da taxa
Deve ser suficiente fazer uma comparação simples como mostra a primeira expressão, mas eu estava tendo problemas com isso. Presumo que seja uma conversão/comparação de string problema (ver primeira Nota). Em vez de tentar obter um valor booleano, usei findstring para gerar a posição ordinal.
FixedARMRateReductionLimit == "'Weekly PMMS Rate"
FINDSTRING(FixedARMRateReductionLimit,"Weekly PMMS Rate",1)
Derivar saída
Aproveite o uso duplo do Operador ternário .
(RateTextPosition > 0) ? (PARAM_VAL_TXT) : (PercentPosition == 0) ? .2 : ((DT_NUMERIC, 18,2) SUBSTRING(FixedARMRateReductionLimit,1,PercentPosition - 1))/100
Você poderia ter simplificado um pouco disso em uma tarefa de script, mas eu apenas faria a lógica na fonte.