Mat*_*att 1 replace sql-server-2008
我有数百万行的表.对于每一行,都有一个nvarchar(max)列.当我填充数据库时,我忘了删除一个尾随的":"字符.什么是通过每一行并删除最后一个字符的最快/最有效的方法?
我认为必须有一个最快的方法来做到这一点,而不是使用看似昂贵的REPLACE.
这是SQL Server 2008
Ric*_*iwi 13
您可以使用替换字符串部分的STUFF函数.在这种情况下,它是最后一个字符.
UPDATE tbl
SET COL = stuff(COL, len(COL), 1, '')
WHERE COL > ''
Run Code Online (Sandbox Code Playgroud)
或者使用LEFT,除最后一个之外的所有内容.条件COL>''确保LEFT具有有效长度.LEFT是SQL Server中的一个快捷方式,似乎实现为SUBSTRING (请参见下文)*
UPDATE tbl
SET COL = LEFT(COL, len(COL) -1)
WHERE COL > ''
Run Code Online (Sandbox Code Playgroud)
如果您同时包含带有和不带有分号的数据,则可以专门定位它们
UPDATE tbl
SET COL = LEFT(COL, len(COL) -1)
WHERE RIGHT(COL,1) = ':'
Run Code Online (Sandbox Code Playgroud)
以下是使用LEFT的查询的查询计划(仅显示文本计划的前3行)
select LEFT(text, LEN(text)-1), * from master..syscomments
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)|--Compute Scalar(DEFINE:([Expr1061]=substring([Union1060],(1),len([Union1060])-(1)))) |--Concatenation |--Compute Scalar(DEFINE:([Expr1005]=(0), [Expr1007]=(0)))
| 归档时间: |
|
| 查看次数: |
22366 次 |
| 最近记录: |