|
|
|
SSC Rookie
      
Group: General Forum Members
Last Login: Monday, December 24, 2012 3:13 AM
Points: 29,
Visits: 107
|
|
If the specification is for a single operation with an integer on either side ...
CREATE FUNCTION [SimpleMath](@expression VARCHAR(max)) RETURNS INT AS BEGIN
DECLARE @position INT, @operator CHAR(1), @left INT, @right INT, @result INT
SELECT @position = PATINDEX('%[*/+-]%', @expression), @operator = SUBSTRING(@expression, @position, 1), @left = CONVERT(INT, LTRIM(RTRIM(LEFT(@expression, @position - 1)))), @right = CONVERT(INT, LTRIM(RTRIM(RIGHT(@expression, LEN(@expression) - (@position + 1))))), @result = CASE @operator WHEN '*' THEN @left * @right WHEN '/' THEN @left / @right WHEN '+' THEN @left + @right WHEN '-' THEN @left - @right END
RETURN @result END GO
;WITH [data] ([expression]) AS ( SELECT '1 + 5' UNION ALL SELECT '10 * 4' UNION ALL SELECT '15 / 3' UNION ALL SELECT '100 - 25' ) SELECT [expression], [result] = [dbo].[SimpleMath]([expression]) FROM [data]
|
|
|
|