Mar*_*iam 5 sql sql-server mathematical-expressions
我想计算保存在 sql server 变量中的数学表达式
我用谷歌搜索了很多,找到了 3 个解决方案,但不适用于我的场景
1-此解决方案无法在函数内执行,但我需要在函数内执行
declare @expression nvarchar(max)
set @expression = '2*3*100'
declare @sql nvarchar(max)
set @sql = 'select @result = ' + @expression
declare @result int
exec sp_executesql @sql, N'@result int output', @result = @result out
select @result
Run Code Online (Sandbox Code Playgroud)
2-这不能保存到变量中,但我需要将结果存储到变量中
DECLARE @LocalVariable VARCHAR(32);
SET @LocalVariable = '2*3*100';
EXEC('SELECT ' + @LocalVariable);
Run Code Online (Sandbox Code Playgroud)
3-我找到的最后一个解决方案给了我一个错误
DECLARE @x xml
DECLARE @v decimal(20,4)
SET @x = ''
DECLARE @calculatedDataString nvarchar(1000) = '(1 div 100)*((118 div 100)*300.000000)'
SET @v= @x.value('sql:variable("@calculatedDataString")', 'decimal(20,4)')
SELECT @v
Run Code Online (Sandbox Code Playgroud)
错误是
Msg 8114, Level 16, State 5, Line 5
Error converting data type nvarchar to numeric.
Run Code Online (Sandbox Code Playgroud)
请指教
也许这可能有帮助。
下面将计算一系列表达式,将结果保存到#temp 表中。从那里您可以将各个结果存储到变量中
这是一个大幅缩小的版本。完整的模型是为宏观替换而构建的(即计算多个数据集的一系列或财务比率)
如果您提供更强大的用例,也许我可以提供进一步的帮助
例子
Declare @Expression table (ID int,Expression varchar(max))
Insert Into @Expression values
(1,'(1/100.0)*((118/100.0)*300.00000)') -- Simple Calculation
,(2,'datediff(DD,''2016-07-29'',GetDate())') -- System Functions
,(3,'(Select max(name) from master..spt_values)') -- Select Value From Table
,(4,'convert(date,GetDate())') -- Get Today's Date
IF OBJECT_ID(N'tempdb..#Results') IS NOT NULL
BEGIN
DROP TABLE #Results
END
Create table #Results (ID int,Value varchar(max))
Declare @SQL varchar(max)=''
Select @SQL = @SQL+concat(',(',ID,',cast(',Expression,' as varchar(max)))') From @Expression
Select @SQL = 'Insert Into #Results Select * From ('+Stuff(@SQL,1,1,'values')+') N(ID,Value)'
Exec(@SQL)
Select * From #Results
Declare @Var decimal(10,4) = (Select Value From #Results where ID=1)
Select @Var -- 3.5400
Run Code Online (Sandbox Code Playgroud)
临时表
ID Value
1 3.54000000000000000
2 243
3 YES OR NO
4 2017-03-29
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7090 次 |
| 最近记录: |