数学公式不能计算??
单价是decimal类型,需要通过公式计算出来,现在显示的是字符串,公式不计算,我希望得到计算出来的decimal类型。
--sql语句如下:
SELECT T.QuoteDetId,
T.QuoteID,
T.QuoteNO,
T.MaterialID,
T.MaterialNO,
T.BatchID,
T.IsBatch,
replace(replace( replace(replace(T6.Formula,'单价',T.UnitPrice),'length',T5.length),'Width',T5.Width),'Weight',T5.Weight) as '单价',
T.Currency,
T.ExchangeRate,
T.ActPeriodDay,
T.Remark,
T.InquireID,
T.InquireNO,
T.InqDetID,
T.SelectFlag,
T2.IsBySupplier,
T3.BussinessId,
T3.ApproveStatus,
T3.CreateByID,
T3.ApproveEndDt
FROM dbo.MPS_QuoteDetail AS T
INNER JOIN dbo.MPS_Quote AS T2 ON T.QuoteID = T2.QuoteID and T.IsBatch=1
INNER JOIN dbo.MPS_Inquire AS T3 ON T3.InquireID = T.InquireID
INNER JOIN dbo.MPS_InquireDetail AS T4 ON T4.InquireID = T3.InquireID
AND T.InqDetID=T4.InqDetID
AND T2.ApproveStatus = 1
AND T.UnitPrice>0
INNER JOIN dbo.MPS_Material T5 on T.BatchID=T4.BatchID
and T4.Brand=T5.Brand
and T5.Weight between T4.WeightMin and T4.WeightMax
and T5.IsParticular=T4.IsParticular
inner join MPS_BatchSet T6 on T5.BatchID=T6.BatchID
运行结果,其中一列,显示如下:
7470.0000*1194.000*889.000*190/2000000000,
[解决办法]
你计算的时候直接运算就行了,没看懂为啥你用那么多replace函数
[解决办法]
/*--计算给定算术表达式(公式)的值
计算给定算术表达式的值
此方法由VB版hhjjhjhj(大头)
提供的VB处理程序程序上改造而来
--邹建2004.07(引用请注明此信息)--*/
/*--调用示例
select dbo.f_calc('123+456')
--*/
ALTER 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
[解决办法]
你把这个结果,再包到select里面就可以运行了,前提是数据类型是数值型
[解决办法]
TO SQL77,你给的语句用不了,
创建函数时候,提示如下:
无法为当前对象而将行添加到 sysdepends,因为此对象所依赖的对象 'master..xp_varbintohexstr' 缺失。仍将创建此对象。
运行select dbo.f_calc('123+456')的时候提示如下:
消息 2812,级别 16,状态 1,第 1 行
找不到存储过程 'master..xp_varbintohexstr'。
to x_wy46:
replace函数你可以不用理他,这是我的业务需求,
T6.Formula是一个公式如:单价*Length*Width*Weight/2000000000
计算的时候需要把单价,Length,Width,Weight用连接表如T和T5的字段值代入。
现在单价的结果是:7470.0000*1194.000*889.000*190/2000000000是字符串,我需要得到运算后的结果。
[解决办法]
DBA_Huangzj,包一层还是不行呢,因为之前replace计算出来单价字段的是字符串,包一层之后还是显示字符串,不计算哦
[解决办法]
所以我后面说了,你要先在里面那层先转换成decimal之类的类型,外面再select
[解决办法]
计算公式字符串没办法转成decimal的,如果能转decimal,那么就没必要外面再套一层了
继续请高手帮忙。。。。