1

我有如下客户数据

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

4 回答 4

1

试试这样...

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

Sql 小提琴演示

于 2013-09-18T04:07:38.923 回答
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)

演示

于 2013-09-18T04:22:28.383 回答
0

替换会很好用。REPLACE('%ABC?;9991?', '%ABC?', '')

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

于 2013-09-18T04:05:32.450 回答
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)
于 2013-09-18T04:09:08.557 回答