gpt4 book ai didi

sql - 如何评估保存在 SQL Server 中 nvarchar 变量中的数学表达式

转载 作者:行者123 更新时间:2023-12-03 21:28:17 25 4
gpt4 key购买 nike

我想评估保存在 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

2- 这个 无法保存到变量 但我需要将结果存储到一个变量中
DECLARE @LocalVariable VARCHAR(32);
SET @LocalVariable = '2*3*100';
EXEC('SELECT ' + @LocalVariable);

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

错误是
Msg 8114, Level 16, State 5, Line 5
Error converting data type nvarchar to numeric.

请指教

最佳答案

也许这可能会有所帮助。

下面将计算一系列表达式,将结果保存到#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

温度表
ID  Value
1 3.54000000000000000
2 243
3 YES OR NO
4 2017-03-29

关于sql - 如何评估保存在 SQL Server 中 nvarchar 变量中的数学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com