请问在SQL中如何实现表达式计算?

gyhyhff 2005-10-25 10:32:54
如果我在表中某一字符字段存入一个计算式如:2+3*5,如何用一段SQL语句将它算出数字结果17?
...全文
269 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gyhyhff 2005-10-25
  • 打赏
  • 举报
回复
谢谢vivianfdlpw
vivianfdlpw 2005-10-25
  • 打赏
  • 举报
回复
declare @tb table
(
s varchar(20)
)
insert @tb
select '2+3*5' union
select '3-6'

--查询
select s as '表达式'
,dbo.f_calc(s) as '结果'
from @tb

--结果
/*

表达式 结果
-------------------- ---------
2+3*5 17
3-6 -3

(所影响的行数为 2 行)
*/
vivianfdlpw 2005-10-25
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_calc]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_calc]
GO

/*--计算表达式的函数

计算给定算术表达式的值

此方法由VB版 hhjjhjhj(大头)
提供的VB处理程序程序上改造而来

--邹建 2004.07(引用请注明此信息)--*/

/*--调用示例

select dbo.f_calc('123+456')
--*/
create function f_calc(
@str varchar(1000)--要计算的表达式
)returns sql_variant
as
begin
declare @re sql_variant

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int

exec @err=sp_oacreate 'MSScriptControl.ScriptControl',@obj out
if @err<>0 goto lb_err

exec @err=sp_oasetproperty @obj,'Language','vbscript'
if @err<>0 goto lb_err

exec @err=sp_oamethod @obj,'Eval',@re out,@str
if @err=0 return(@re)

lb_err:
exec sp_oageterrorinfo NULL, @src out, @desc out
declare @errb varbinary(4),@s varchar(20)
set @errb=cast(@err as varbinary(4))
exec master..xp_varbintohexstr @errb,@s out
return('错误号: '+@s+char(13)+'错误源: '+@src+char(13)+'错误描述: '+@desc)
end
go


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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