我有一个客户数据,如下面的
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."
出了什么问题,如何解决?
答案 0 :(得分:1)
试试这个......
UPDATE Table1 Set Cid=Replace(Left(Cid,Len(CID)-1),'%ABC?;','') FROM TABLE1
答案 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)
答案 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)