查找/替换数字与自身减去一些固定值

时间:2013-12-12 19:39:26

标签: sql sql-server regex replace

所以我有一个SQL脚本可以在数据库表中插入大量的行(140,000+)。每行都有一列或多列,其中包含数值。我需要用数字减去一些偏移来替换每个数字(参见下面的例子)。任何人都知道一个快速简便的方法或一个程序来做它?基本上我只想指定偏移量是什么,并让它遍历文件,查找所有数字并从每个数字中减去偏移量。

非常感谢任何和所有帮助(或指向正确的方向)!提前谢谢!

示例行:

insert into failurelist (failurelist,failurecode,parent,type,orgid) values (6284, 'ABSRBR', null, null, 'ABC');
insert into failurelist (failurelist,failurecode,parent,type,orgid) values (6285, 'SEIZED', '6284', 'PROBLEM', 'ABC');
insert into failurelist (failurelist,failurecode,parent,type,orgid) values (6286, 'ABSRB-PERF', '6285', 'CAUSE', 'ABC');

这些是脚本的前3行。对于这个脚本,我想减去6283(因此它们从1开始编号而不是6284编号)。请注意,某些数值是单引号''而其他数值不是。

2 个答案:

答案 0 :(得分:2)

你不会写这样的东西:

  Update failurelist set failurelist = failurelist - 6283 

答案 1 :(得分:0)

“父母”栏目似乎是一元关系的事实对我来说有点混乱。如果主键列是整数,为什么父列应表示为字符串。如果它们都是整数,那么你可以:

UPDATE failurelist 
SET failurelist = failurelist - 6283,
   parent = parent - 6283

目前的形式你需要做这样的事情:

DECLARE @failurelist TABLE
(
failurelist     INT,
failurecode     varchar(20),
parent          varchar(20),
type            varchar(20),
orgid           varchar(20)
)

insert into @failurelist (failurelist,failurecode,parent,type,orgid) values (6284, 'ABSRBR', null, null, 'ABC');
insert into @failurelist (failurelist,failurecode,parent,type,orgid) values (6285, 'SEIZED', '6284', 'PROBLEM', 'ABC');
insert into @failurelist (failurelist,failurecode,parent,type,orgid) values (6286, 'ABSRB-PERF', '6285', 'CAUSE', 'ABC');

UPDATE @failurelist 
SET failurelist = failurelist - 6283,
    parent      = CAST(CAST(parent AS INT) -6283 AS varchar(20))

现在表变量@failurelist包含所需的结果。您只需要使用表变量的结果填充实际表,如此

INSERT INTO failurelist
  SELECT * FROM @failurelist