求‘^’符号解析 为power函数 的SQL代码 即 能把 5*4^2/3转换成5*power(4,2)/3 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的。乘方的优先级应是高于*/的。即能把字符串: X0*X1^X2/X3转换成字符串: X05*power(X1,X2)/X3前后的运算是加减乘除都无所谓。输入输出都是varchar百谢 格式固定可以这样declare @var varchar(100)set @var='5*4^2/3'select left(@var,PATINDEX('%*%',@var))+'power('+right(left(@var,PATINDEX('%^%',@var)-1),PATINDEX('%^%',@var)-PATINDEX('%*%',@var)-1)+','+right(left(@var,PATINDEX('%/%',@var)-1),PATINDEX('%/%',@var)-PATINDEX('%^%',@var)-1)+')'+right(@var,len(@var)-PATINDEX('%/%',@var)+1)----------------------5*power(4,2)/3(1 行受影响) 谢谢ldslove:格式不固定啊。不过谢谢你给的例子,我有了点思路。------------------夜了,明早再斗。 create function f_power(@s varchar(100))returns varchar(100)asbegindeclare @s1 varchar(50),@s2 varchar(50)select @s1= left(@s,charindex('^',@s)-1), @s2= right(@s,charindex('^',reverse(@s))-1)select @s1=stuff(@s1,len(@s1)-patindex('%[^0-9]%',reverse(@s1))+2,0,'power('), @s2=stuff(@s2,patindex('%[^0-9]%',@s2),0,')')return @s1+','+@s2endgoselect dbo.f_power('5*4^2/3')/**-------------------------------5*power(4,2)/3(1 行受影响)**/drop function f_power只适合只有一个^的表达式 啊,结贴给分漏了dawugui,抱歉。 再次修改。支持多个'^',修正了一个小bug。alter function f_power(@s varchar(100))returns varchar(100)asbegin declare @Idx1 int, @idx0 int, @Idx2 int declare @s1 varchar(50), @s2 varchar(50) declare @ss1 varchar(50), @ss2 varchar(50) select @Idx1 = Charindex('^', @s) if @Idx1 = 0 return @s select @s1 = left(@s,@Idx1-1), @s2 = right(@s,Len(@s)-@Idx1) select @Idx0 = Patindex('%[^0-9a-z]%',Reverse(@s1)), @Idx2 = Patindex('%[^0-9a-z]%',@s2) if @Idx0=0 select @ss1=@s1 else select @ss1=Right(@s1, @Idx0-1) if @Idx2=0 select @ss2=@s2 else select @ss2=Left(@s2, @Idx2-1) select @s=Replace(@s, @ss1+'^'+@ss2, 'Power('+@ss1+','+@ss2+')') select @s=dbo.f_power(@s) return @send===================================================================print dbo.f_power('X1^2+x2^2')-------------------------------------------------------------------Power(X1,2)+Power(x2,2) 求个sql 性能监视器计数器要求 (错误)高手帮忙 请教一个查询问题 求VB+SQL中产生一个报表的问题。 数据库设计问题 vs 2008连接sql server 2008 r2连不上 请问各位老大,sql server 2005中有没有象oracle一样的rowcount? ◆◆◆如何使SQL SERVER只能在局域网内访问,而不能让外网访问 如何将两个数据库合并到一起再进行操作 select cast(getdate() as varchar(10)) 如何让输出的结果是 2004-08-30 SQL语句的问题 如何写这句删除的sql语句
转换成字符串: X05*power(X1,X2)/X3
前后的运算是加减乘除都无所谓。
输入输出都是varchar百谢
格式固定可以这样declare @var varchar(100)set @var='5*4^2/3'select left(@var,PATINDEX('%*%',@var))+'power('+right(left(@var,PATINDEX('%^%',@var)-1),PATINDEX('%^%',@var)-PATINDEX('%*%',@var)-1)+','+right(left(@var,PATINDEX('%/%',@var)-1),PATINDEX('%/%',@var)-PATINDEX('%^%',@var)-1)+')'+right(@var,len(@var)-PATINDEX('%/%',@var)+1)
----------------------
5*power(4,2)/3(1 行受影响)
夜了,明早再斗。
returns varchar(100)
as
begin
declare @s1 varchar(50),@s2 varchar(50)
select
@s1= left(@s,charindex('^',@s)-1),
@s2= right(@s,charindex('^',reverse(@s))-1)
select
@s1=stuff(@s1,len(@s1)-patindex('%[^0-9]%',reverse(@s1))+2,0,'power('),
@s2=stuff(@s2,patindex('%[^0-9]%',@s2),0,')')
return @s1+','+@s2
end
goselect dbo.f_power('5*4^2/3')
/**-------------------------------
5*power(4,2)/3(1 行受影响)
**/drop function f_power
只适合只有一个^的表达式
returns varchar(100)
as
begin
declare @Idx1 int, @idx0 int, @Idx2 int
declare @s1 varchar(50), @s2 varchar(50)
declare @ss1 varchar(50), @ss2 varchar(50) select
@Idx1 = Charindex('^', @s)
if @Idx1 = 0
return @s select
@s1 = left(@s,@Idx1-1),
@s2 = right(@s,Len(@s)-@Idx1) select
@Idx0 = Patindex('%[^0-9a-z]%',Reverse(@s1)),
@Idx2 = Patindex('%[^0-9a-z]%',@s2) if @Idx0=0
select @ss1=@s1
else
select @ss1=Right(@s1, @Idx0-1) if @Idx2=0
select @ss2=@s2
else
select @ss2=Left(@s2, @Idx2-1) select
@s=Replace(@s, @ss1+'^'+@ss2, 'Power('+@ss1+','+@ss2+')') select
@s=dbo.f_power(@s) return @s
end===================================================================
print dbo.f_power('X1^2+x2^2')-------------------------------------------------------------------
Power(X1,2)+Power(x2,2)