关于字符公式计算问题,这个问题搞我很久了。。。

zhrun 2009-11-24 05:14:11
直接来代码
DECLARE @Test TABLE (chvData CHAR(32))

INSERT INTO @Test
SELECT '3*8'
UNION ALL
SELECT '1+3'
UNION ALL
SELECT '6/2'

SELECT * FROM @Test

结果是:
3*8
1+3

如果让结果变成计算后的值
24
4
3

不知道有什么办法可以做到,
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhrun 2009-11-24
  • 打赏
  • 举报
回复
感谢 大家的帮助,,3qq...
nianran520 2009-11-24
  • 打赏
  • 举报
回复

--用乌龟的
DECLARE @Test TABLE (chvData CHAR(32))

INSERT INTO @Test
SELECT '3*8'
UNION ALL
SELECT '1+3/5'
UNION ALL
SELECT '6/2+10'




select
dbo.f_calc(replace(replace(chvData,'×','*'),'÷','/')) as chvData
from @Test
水族杰纶 2009-11-24
  • 打赏
  • 举报
回复
if object_id('test')is not null drop table test
go
create TABLE test(chvData CHAR(32))
INSERT INTO Test
SELECT '3*8'
UNION ALL
SELECT '1+3'
UNION ALL
SELECT '6/2'
declare @s varchar(4000)
set @s=''
select @s=@s+' select chvData='+chvData+' union all' from Test
set @s=left(@s,len(@s)-10)
exec(@s)
/*
chvData
-----------
24
4
3

(3 個資料列受到影響)

*/
zhrun 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happy_stone 的回复:]
SQL codeDECLARE@TestTABLE (chvDataCHAR(32))INSERTINTO@TestSELECT3*8UNIONALLSELECT1+3UNIONALLSELECT6/2
[/Quote]

数据表里存的是 类似这样的字符数据‘3+1’ ,而不是计算好了的字符数据'4'
nianran520 2009-11-24
  • 打赏
  • 举报
回复
DECLARE @Test TABLE (chvData CHAR(32)) 

INSERT INTO @Test
SELECT 3*8
UNION ALL
SELECT 1+3
UNION ALL
SELECT 6/2

SELECT * FROM @Test
快乐_石头 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happy_stone 的回复:]
SQL codeDECLARE@TestTABLE (chvDataCHAR(32))INSERTINTO@TestSELECT3*8UNIONALLSELECT1+3UNIONALLSELECT6/2
[/Quote]
搞錯
可以在加个字段存公式,另外一個字段存結果
或者照樓上烏龜的
icelovey 2009-11-24
  • 打赏
  • 举报
回复
搬凳子学习~
dawugui 2009-11-24
  • 打赏
  • 举报
回复
参考:
计算表达式的值
create table Tb_UinonConfig(prim1 real,arithmetic varchar(50))
insert into Tb_UinonConfig select 100,'+20.5×15÷13.1'
insert into Tb_UinonConfig select 80 ,'÷2.5×100+23.0'
insert into Tb_UinonConfig select -80,'+100+(23.0×6)'
go

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



select prim1,arithmetic,
dbo.f_calc(cast(prim1 as varchar)+replace(replace(arithmetic,'×','*'),'÷','/')) as col from Tb_UinonConfig


drop function f_calc
drop table Tb_UinonConfig
/*

autoid col
----------- -----------
1 1
2 1
3 2
4 2

*/
快乐_石头 2009-11-24
  • 打赏
  • 举报
回复
DECLARE @Test TABLE (chvData CHAR(32)) 

INSERT INTO @Test
SELECT 3*8
UNION ALL
SELECT 1+3
UNION ALL
SELECT 6/2

22,298

社区成员

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

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