如何删除varchar正面和背面的某些字符

时间:2013-09-18 03:58:50

标签: sql character

我有一个客户数据,如下面的

Table= Customer
field= CardNo

CardNo中的数据:

%ABC?;9991?
%ABC?;99912?
%ABC?;999123?
%ABC?;888123?

我想要的输出是

9991
99912
999123
888123

但是我要删除所有“%ABC?”在前面和“?”在后面,在整个CardNo字段中。我是怎么做到的我试过这个没有成功:

UPDATE Customer
SET cardno = RIGHT(cardno, LEN(cardno) - 7)

我收到错误:

"Return Error 
Msg 536, Level 16, State 2, Line 1
Invalid length parameter passed to the RIGHT function.
The statement has been terminated."

出了什么问题,如何解决?

4 个答案:

答案 0 :(得分:1)

试试这个......

UPDATE Table1 Set Cid=Replace(Left(Cid,Len(CID)-1),'%ABC?;','') FROM TABLE1

Sql Fiddle Demo

答案 1 :(得分:1)

如果你的意思不是这样,你应该更清楚你的预期结果是什么:

DECLARE @foo VARCHAR(32)
SET @foo = '%ABC?;888123?'
SELECT SUBSTRING(@foo, 7, LEN(@foo) - 7)

结果:888123

适用于您的代码:

UPDATE Customer
SET cardno = SUBSTRING(cardno, 7, LEN(cardno) - 7)

Demo

答案 2 :(得分:0)

REPLACE效果很好。 REPLACE('%ABC ?; 9991?','%ABC?','')

您可以将它们链接在一起以删除第二个?同样。

答案 3 :(得分:0)

考虑到模式的所有可能性,这是一种相当暴力的方式:

UPDATE Customer
    SET cardno = (case when cardno like '[%]ABC[?];%[?]'
                       then substring(cardno, 6, len(cardno) - 7)
                       when cardno like '[%]ABC[?];%'
                       then substring(cardno, 6, len(cardno) - 6)
                       when cardno like '%[?]'
                       then substring(cardno, len(cardno) - 1)
                       else cardno
                  end)