sql-server-2008 - 从 SQL 表中的一行中删除尾随 ":"字符

标签 sql-server-2008 replace

我有数百万行的表格。对于每一行,都有一个 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/

相关文章:

SQL : Weird query performance after "select into" a new table

python - 如何交换数据集中整列的单元格值?

Python 替换整个单词,包括开头的特殊字符

SQL Server 'invalid column name' 错误

SQL Server 添加新列后列名无效

php - 从 php codeigniter 调用存储过程

c# - 如何在 C# 中以编程方式创建 SQL Server 数据库

javascript - 将符号编号替换为 gif

javascript - 如何用另一个字符串替换字符串中的某个单词并排除原子正则表达式中某些类型的所述单词

java - 如何用制表符替换行开头的所有空格?