我有数百万行的表格。对于每一行,都有一个 nvarchar(max) 列。当我填充数据库时,我忘记删除尾随的“:”字符。遍历每一行并删除最后一个字符的最快/最有效的方法是什么?
我想一定有比使用看起来很昂贵的 REPLACE 更快的方法来做到这一点。
这是 SQL Server 2008
最佳答案
您可以使用 STUFF替换字符串部分的函数。在本例中,它是最后一个字符。
UPDATE tbl
SET COL = stuff(COL, len(COL), 1, '')
WHERE COL > ''
或者使用 LEFT,取除最后一个以外的所有。条件 COL > '' 确保 LEFT 具有有效长度。 LEFT 是 SQL Server 中的快捷方式,似乎实现为 SUBSTRING ( 请参阅下文)*
UPDATE tbl
SET COL = LEFT(COL, len(COL) -1)
WHERE COL > ''
如果您同时拥有带尾随分号和不带尾随分号的数据,则可以专门针对它们
UPDATE tbl
SET COL = LEFT(COL, len(COL) -1)
WHERE RIGHT(COL,1) = ':'
这是使用 LEFT 的查询的查询计划(仅显示文本计划的前 3 行)
select LEFT(text, LEN(text)-1), * from master..syscomments
|--Compute Scalar(DEFINE:([Expr1061]=substring([Union1060],(1),len([Union1060])-(1)))) |--Concatenation |--Compute Scalar(DEFINE:([Expr1005]=(0), [Expr1007]=(0)))
关于sql-server-2008 - 从 SQL 表中的一行中删除尾随 ":"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742444/