SQL 表达式计算

oHaiBin123456 2019-09-11 07:30:20
有如下表记录:



想实现,表达式先计算,然后整列再求和,能用一条select 实现嘛?或者有其他方法嘛?
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2019-09-12
  • 打赏
  • 举报
回复
5楼这个不错,测试下看看
ダ雨夹雪リ 2019-09-12
  • 打赏
  • 举报
回复

create function Eval(@value varchar(100))
returns sql_variant
as
begin
declare @object int
declare @v sql_variant
exec sp_OACreate 'MSScriptControl.ScriptControl',@object output
exec sp_OASetProperty @object, 'Language','vbscript'
exec sp_OAMethod @object, 'eval', @v out,@value
exec sp_OADestroy @object
return @v
end

zjcxc 2019-09-12
  • 打赏
  • 举报
回复
可以考虑写个 CLR 函数
ダ雨夹雪リ 2019-09-12
  • 打赏
  • 举报
回复
这个64位的不行,只支持32位的
stelf 2019-09-11
  • 打赏
  • 举报
回复
既然想计算表达式,为什么用这种方式存储呢?这不是自己给自己挖坑吗
二月十六 2019-09-11
  • 打赏
  • 举报
回复
把值先计算并更新列,然后再sum,如果不想改源数据,则加一列专门计算用
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([XSTDFZ_F1] nvarchar(33))
Insert #T
select N'1800' union all
select N'1840*1+1800*5'
Go
--测试数据结束
DECLARE @sql nvarchar(max)=''
DECLARE CUR_B CURSOR FORWARD_ONLY FOR
SELECT 'UPDATE #T SET [XSTDFZ_F1] = ' + XSTDFZ_F1 + ' FROM B WHERE CURRENT OF CUR_B'
FROM #T
;
OPEN CUR_B;
WHILE 1 = 1
BEGIN
FETCH CUR_B INTO @sql;
IF NOT @@FETCH_STATUS = 0 BREAK;
EXEC(@sql);
END;
CLOSE CUR_B; DEALLOCATE CUR_B

SELECT SUM(CONVERT(DECIMAL,XSTDFZ_F1)) AS XSTDFZ_F1 FROM #T


quwang86 2019-09-11
  • 打赏
  • 举报
回复
SQL里面暂时没想到 复制到EXCEL表格里面比较好实现

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧