@express 为计算表达式中的数据
数据类型如下 A+B+C-E-F*D/F.....之类的数据 请问该如何取出各种符号中间的数据 谢谢
CREATE PROCEDURE dt_guestroom_income (@p1 char(2) output,@p2 datetime)
AS
declare @line_y char(3) --列号
declare @subj_name varchar(64)--科目名称
declare @today_income numeric --当天收入
declare @lastyear_today_income numeric --去年同日
declare @month_income numeric --本月收入
declare @year_income numeric --本年收入
declare @last_time numeric --去年同期
declare @growth_rate numeric --增长率
declare @express char(128) --计算表达式
declare @check char(1) --符号表达式
declare @i int--位置记数
--declare @pos int --符号位置
declare @subj_code varchar(16)
--从科目基础表中查出相应的科目行号,科目名称
delete from ht_test_table1
--从表ht_check_report_design中取科目名称和计算表达式
Declare Cur_tmp Cursor For
select subj_name,express
from ht_check_report_design
where code [email protected]
open Cur_tmp
Fetch Next From Cur_tmp into @subj_name,@express
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Cur_tmp into @subj_name,@express
[email protected]+,-,*,/,h 等符号
--若为+号则
if ( CHARINDEX( '+ ', @express,1)> 0)
----做加法处理 发现+号 拆分前面和后面的数据
SET @i=1
WHILE @i <=LEN(@express)
BEGIN
if ( SUBSTRING (@express,@i,1) = '+ ')
[email protected] 取出加号和前一个符号前的代码
SET @[email protected]+1
END
--若为-号则
if(CHARINDEX( '- ',@express,1)> 0)
---做减法处理
--若为*号则
if(CHARINDEX( '* ',@express,1)> 0)
---做乘法处理
--若为/号则
if(CHARINDEX( '/ ',@express,1)> 0)
---做除法处理
--若为h则
if(CHARINDEX( 'h ',@express,1)> 0)
print @subj_name + '-- '[email protected]
--做h的处理
END
CLOSE Cur_tmp
Deallocate Cur_tmp
--从科目汇总表ht_cash_subj_rep中按科目代码取出符合条件数据
GO
------解决方案--------------------
declare @str varchar(100), @sql varchar(8000)
set @str= 'A+B+C-E-F*D/F '
select @sql= 'select ' ' '
select @[email protected]+replace(replace(replace(replace(@str, '/ ', ' ' ' union all select ' ' '), '* ', ' ' ' union all select ' ' '), '- ', ' ' ' union all select ' ' '), '+ ', ' ' ' union all select ' ' ')+ ' ' ' '
--print @sql
exec(@sql)