将数据从同一列中的一列推送到另一列

时间:2019-08-15 20:08:17

标签: sql sql-server tsql sql-server-2008-r2

我需要将值从数据类型为varchar的OrderNumber列移动到同一表中名为newNumber的表中的新列,该表的数据类型为bigint。所以我有很多值,这是OrderNumber列中的几个:

-ON12747583
-1749475944

我希望能够将这些许多值放入bigint的NewNumber列中,并删除开头的“ ON”。所以我应该看到:

NewNumber:  12747583,1749475944
OrderNumber: ON12747583,1749475944

注意:逗号只是将值彼此分开,它们不在同一行中。

2 个答案:

答案 0 :(得分:2)

您可以将REPLACE()函数用作

CREATE TABLE T(
  Old VARCHAR(45),
  New BIGINT
);

INSERT INTO T(Old) VALUES
('ON12747583'),
('1749475944');

UPDATE T
SET New = REPLACE(Old, 'ON', '')
FROM T;

更新:

我想您正在存储一些不适合 BIGINT 的数据,因为您坚持认为'ON'之外没有其他字符。所以我建议您将数据类型更改为

ALTER TABLE T
ALTER COLUMN New DECIMAL(38, 0);

然后运行查询

UPDATE T
SET New = REPLACE(Old, 'ON', '')
FROM T;
--WHERE if needed

答案 1 :(得分:0)

为此,我建议使用foo

foo/text()

您要使用<data><foo>a<!-- comment -->b</foo><foo>c</foo></data>,因此替换特定于第一个STUFF()。在这种情况下,您可能知道数字的其余值,但是我认为使用UPDATE T SET NewNumber = STUFF(OrderNumber, 1, 2, '') WHERE OrderNumber LIKE 'ON%'; 代替STUFF()是一个好习惯。

第二,您要使用'ON'子句限制要更新的行。即使没有值更改,SQL Server也会产生更新行的开销。如果可以的话,您希望避免这种开销。