18/01/2011, 16:41
|
| | | Fecha de Ingreso: diciembre-2004
Mensajes: 458
Antigüedad: 19 años, 10 meses Puntos: 3 | |
Respuesta: Convertir Formula en Resultado Con una funcion SPLIT se podria hacer eso que quieres. Paso 1. Creamos la funcion Split
Código:
CREATE FUNCTION SPLIT
(
@s nvarchar(max),
@splitChar nchar(1)
)
returns @t table (id int identity(1,1), val nvarchar(max))
as
begin
declare @i int, @j int
select @i = 0, @j = (len(@s) - len(replace(@s,@splitChar,'')))
;with cte
as
(
select
i = @i + 1,
s = @s,
n = substring(@s, 0, charindex(@splitChar, @s)),
m = substring(@s, charindex(@splitChar, @s)+1, len(@s) - charindex(@splitChar, @s))
union all
select
i = cte.i + 1,
s = cte.m,
n = substring(cte.m, 0, charindex(@splitChar, cte.m)),
m = substring(
cte.m,
charindex(@splitChar, cte.m) + 1,
len(cte.m)-charindex(@splitChar, cte.m)
)
from cte
where i <= @j
)
insert into @t (val)
select pieces
from
(
select
ltrim(rtrim(case when i <= @j then n else m end)) pieces
from cte
) t
where
len(pieces) > 0
option (maxrecursion 0)
return
end
GO
Y luego la invocas select SUM(cast(val as decimal(10,2))) from dbo.SPLIT('54.2 + 83 + 356 + 97','+')
Si bien aqui lo hace para esta linea, lo ideal seria que la misma funcion retorne ya el valor de la suma. Entonces en ese caso solamente modificas la funcion para que en lugar de que te retorne una tabla, te retorne un decimal con el resultado.
y solamente harias algo como asi SELECT FORMULA, dbo.SumaFormula(FORMULA) as RESULTADO from DATOS
__________________ roy rojas
Programación en Español: DotNetcr.com |