从列中间删除数据

时间:2014-12-30 15:44:05

标签: sql sql-server-2008-r2

我有一个SQL Server 2008 R2表,其中有一列存储仅用于注释目的的路径名。该列名为DESCRIPTION,看起来有点像这样:

X1200/Redbridge_2/edf0192

我必须删除上面的中间部分(本例中的/Redbridge_2部分,尽管名称各不相同)。但是,我只想对从X1200开始的记录执行此操作。我无法找到如何在SQL Server 2008 R2中运行查询以仅删除初始/之后的数据,并且仅删除第二个/。我真的很感激任何帮助。

顺便说一下,表名是PAR

1 个答案:

答案 0 :(得分:1)

使用字符串函数的组合我认为此查询将执行您想要的操作:

UPDATE your_table
SET DESCRIPTION = LEFT(DESCRIPTION, CHARINDEX('/',DESCRIPTION,0)) + SUBSTRING(DESCRIPTION, CHARINDEX('/',DESCRIPTION, CHARINDEX('/',DESCRIPTION,0)+1), LEN(DESCRIPTION))
WHERE LEFT(description, 5) = 'X1200'

这会将您的示例字符串更改为X1200//edf0192

可能有更好的方法来做到这一点。如果要在应用更新之前查看行的外观,可以将其作为select语句运行:

SELECT LEFT(DESCRIPTION, CHARINDEX('/',DESCRIPTION,0)) + SUBSTRING(DESCRIPTION, CHARINDEX('/',DESCRIPTION, CHARINDEX('/',DESCRIPTION,0)+1), LEN(DESCRIPTION))
FROM your_table
WHERE LEFT(description, 5) = 'X1200'