在SQL Server服务器的公式中将整数值乘以10

时间:2014-10-20 11:40:59

标签: sql-server

我在表格中有一个维度字段,其值为

40x44+(12), 50x63+10(0), 65x88+0, 16+8x41.

无论算术运算符如何,我都需要将值乘以10并保留公式。

上述值应为

400x440+(120), 500x630+100(0), 650x880+0, 160+80x410

乘以10后。

请帮助我如何在SQL Server 2008中实现这一目标。

1 个答案:

答案 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.