我在表格中有一个维度字段,其值为
40x44+(12), 50x63+10(0), 65x88+0, 16+8x41.
无论算术运算符如何,我都需要将值乘以10并保留公式。
上述值应为
400x440+(120), 500x630+100(0), 650x880+0, 160+80x410
乘以10后。
请帮助我如何在SQL Server 2008中实现这一目标。
答案 0 :(得分:0)
只要你的文字中没有@,这就可以了。否则选择另一个结束字符:
创建此功能:
CREATE function [dbo].[f_splitx]
(
@param nvarchar(2000)
)
returns nvarchar(2000)
as
begin
declare @rv nvarchar(2000) = ''
;with a as
(
select
cast(@param + '@' as nvarchar(2000)) f,
cast(null as nvarchar(2000)) g,
1 t,
1 seq
union all
select
cast(stuff(f, 1, t-1, '') as nvarchar(2000)),
left(f, t-1),
patindex(case when stuff(f, 1, t-1, '')
like '[0-9]%' then '%[^0-9]%' else '%[0-9@]%' end,
stuff(f, 1, t-1, '')),
seq + 1
from a
where t > 1 or seq = 1
)
select @rv +=
case when g like '[0-9]%' then cast(g* 10 as varchar(20)) else g end
from a
where seq > 2
return @rv
end
执行如下:
SELECT dbo.f_splitx('40x44+(12), 50x63+10(0), 65x88+0, 16+8x41.')
结果:
400x440+(120), 500x630+100(0), 650x880+0, 160+80x410.
或者像这样执行:
SELECT dbo.f_splitx(val)
FROM (values('40x44+(12)'), ('50x63+10(0)'), ('65x88+0'), ('16+8x41.')) x(val)
结果:
400x440+(120)
500x630+100(0)
650x880+0
160+80x410.