日期:2014-05-17  浏览次数:20738 次

SQL怎样去除表达式里的*号?
怎样处理这样的字符,有三个字段A1,A2,A3,A4:
A1[float]   A2[float]   A3[float]   A4[nvarchar]
------------------------------------------------
12          23          45          12*23*45
0           12          44          12*44
0           88          null        88
...

A4的等于A1*A2*A3,如果某个字段等于0则不拼凑,只等于非0或非null的数值加上*号组成。

------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (A1 int,A2 int,A3 int,A4 AS CONVERT(VARCHAR,A1)+'*'+CONVERT(VARCHAR,A2)+'*'+CONVERT(VARCHAR,A3))  --lz把这个地方重新修改一下判断null及0值处理一下即可。
insert into [TB]
select 12,23,45 union all
select 0,12,44 union all
select 0,88,null

select * from [TB]

------解决方案--------------------
这个意思?
select a1,a2,a3,a4=
replace(replace(case when isnull(a1,0)=0 then 'a' else rtrim(a1) end+'*'+case when isnull(a2,0)=0 then 'a' else rtrim(a2) end+'*'+case when isnull(a3,0)=0 then 'a' else rtrim(a3) end,'a*',''),'*a','')
from tb
------解决方案--------------------
select (case when A1 is null or A1=0 then '' 
when (A2 is not null and A2<>0) or (A3 is not null and A3<>0) then A1+'*'
else A1 end)
+(case when A2 is null or A2=0 then '' 
when A3 is not null and A3<>0 then A2+'*'
else A2 end)
+(case when A3 is null or A1=0 then '' else A3 end)
as A4
------解决方案--------------------

declare @T table([A1] int,[A2] int,[A3] int)
insert @T
select 12,23,45 union all
select 0,12,44 union all
select 0,88,null union all
select 4,0,5 union all
select 6,null,8 union all
select 0,0,0

select 
replace(isnull(ltrim(iif([A1]=0,null,[A1]))+'*','')+
isnull(ltrim(iif([A2]=0,null,[A2])),'')+
isnull('*'+ltrim(iif([A3]=0,null,[A3])),''),'**','*')
from @T t 
/*
12*23*45
12*44
88
4*5
6*8
*/