我需要将值从数据类型为varchar的OrderNumber列移动到同一表中名为newNumber的表中的新列,该表的数据类型为bigint。所以我有很多值,这是OrderNumber列中的几个:
-ON12747583
-1749475944
我希望能够将这些许多值放入bigint的NewNumber列中,并删除开头的“ ON”。所以我应该看到:
NewNumber: 12747583,1749475944
OrderNumber: ON12747583,1749475944
注意:逗号只是将值彼此分开,它们不在同一行中。
答案 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也会产生更新行的开销。如果可以的话,您希望避免这种开销。