Sql server 删除前导“;副本;varchar列中的字符串

Sql server 删除前导“;副本;varchar列中的字符串,sql-server,sql-server-2008,Sql Server,Sql Server 2008,在我的表格中,我想从标题列中删除前7个字符 我有一个如下表,我想删除'Copy of'前缀: Title --------------------- Copy ofthis is tile1 Copy ofthis is another tile2 我试过这个: Update MyTable SET Title=(SELECT RIGHT(Title,LEN(Title)- 7) AS Title) WHERE Title LIKE 'Copy of%' 有什么建议吗?这不需要子查询,

在我的表格中,我想从
标题
列中删除前7个字符

我有一个如下表,我想删除
'Copy of'
前缀:

Title
---------------------
Copy ofthis is tile1
Copy ofthis is another tile2
我试过这个:

Update MyTable SET Title=(SELECT RIGHT(Title,LEN(Title)- 7) AS Title) 
  WHERE Title LIKE 'Copy of%'

有什么建议吗?

这不需要子查询,通常也不需要检查长度来计算输出的长度。假设这不是
varchar(max)
,您可以执行以下操作:

UPDATE dbo.MyTable
  SET Title = SUBSTRING(Title, 8, 8000)
  WHERE Title LIKE 'Copy of%';
UPDATE dbo.MyTable
  SET Title = STUFF(Title, 1, 7, '')
  WHERE Title LIKE 'Copy of%';
或者你可以:

UPDATE dbo.MyTable
  SET Title = SUBSTRING(Title, 8, 8000)
  WHERE Title LIKE 'Copy of%';
UPDATE dbo.MyTable
  SET Title = STUFF(Title, 1, 7, '')
  WHERE Title LIKE 'Copy of%';
如果值为
'Copy of something'
且不需要前导空格,您可能还需要使用
LTRIM()

UPDATE dbo.MyTable
  SET Title = LTRIM(STUFF(Title, 1, 7, ''))
  WHERE Title LIKE 'Copy of%';

您需要子字符串函数

update mytable set value = substring  ( value, 8, len (value) )
where value like 'copy of%'

实际上,您的查询虽然乍一看并不正确,但它的语法是有效的,并且似乎可以工作。问题是什么?这实际上留下了
f
,因此对于示例数据,您最终得到的是
f这是tile1
,而
f这是另一个tile2