在列中替换给定的字符串出现

时间:2017-04-03 06:54:16

标签: mysql sql replace

我有一个这样的专栏:

 public class test extends AppCompatActivity{

    public  int number ;

    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.testing);

        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);

        test();


         btn1.setOnClickListener(new View.OnClickListener() {

         @Override
         public void onClick(View arg0) {
          if(number==1){
          number=2;
            }
             Log.e("number value : ",String.valueOf(number));

         }
    });


     btn2.setOnClickListener(new View.OnClickListener() {

         @Override
        public void onClick(View arg0) {
        if(number==2){
             number=1;
          }
             Log.e("number value : ",String.valueOf(number));

    }

    });


}

    void test()
    {

      if(number<1) {
        number = 1;
        }

            Log.e("number value : ",String.valueOf(number));    

        }    

 }

我想替换一个var(例如:第三个位置的一个,恰好是A),但保留其他任何一个。该位置由变量确定。所以我应该得到:

vars
-----------
|A|B|A|D|AB|B...

我知道我应该使用REPLACE和可能的SUBSTRING_INDEX,但我无法弄清楚如何使用。这是我尝试过的: 让我们说:pos = 3;

vars
-----------
|A|B|D|AB|B...

但这实际上取代了所有其他角色并保留了我需要替换的角色。

更新:请注意,我不知道我想替换什么var,只知道它的位置。

更新2:

vars = REPLACE(vars, (SUBSTRING_INDEX(SUBSTRING_INDEX(vars, '|', :pos), '|', -1)), '')

这就是诀窍,但我忘了提到vars并不总是| A和| B等,而且| AB,| AC ......所以这个位置不应该总是移动一个字符,但是直到下一个vars = Concat(substring(vars ,1,:pos-1), substring(vars,:pos+2))

3 个答案:

答案 0 :(得分:1)

如果您知道位置编号6是您的职位变量

SELECT  concat(SUBSTRING('|A|B|A|D|G|B',1,6-2),SUBSTRING('|A|B|A|D|G|B',6+1) )

或者如果您知道第二次出现的字符串

    SELECT REPLACE( '|A|B|A|D|G|B', concat( SUBSTRING_INDEX( '|A|B|A|D|G|B', 
'|A', 2 ) , "|A" ) , SUBSTRING_INDEX( '|A|B|A|D|G|B', '|A', 2 ) ) 

答案 1 :(得分:1)

正如@Zohar所说,我同意你的模型被打破了。然而,如果你想实现,这里有locatesubstringconcat的例子:

第一个locate第一个|A第一个|A的索引将始终位于其之后。

  

locate('|A','|A|B|A|D|G|B', locate('|A','|A|B|A|D|G|B')+1)

     

- 这里+1表示第一个索引

第二次找到sub-string after the second occurrence of |A

  

substring('|A|B|A|D|G|B',locate('|A','|A|B|A|D|G|B', locate('|A','|A|B|A|D|G|B')+1)+2)

     

- 此处+2表示字符串的长度为|A

第三次找到sub-string before the second occurrence of |A

  

substring('|A|B|A|D|G|B',locate('|A','|A|B|A|D|G|B', 1,locate('|A','|A|B|A|D|G|B')+1)-1)

     

- 这里-1表示|A

之前从开始到字符的任何事情

第四,concat第二次出现|A

之前和之后的字符串
Concat(
  substring('|A|B|A|D|G|B',locate('|A','|A|B|A|D|G|B',1,locate('|A','|A|B|A|D|G|B')+1)-1),
  substring('|A|B|A|D|G|B',locate('|A','|A|B|A|D|G|B', locate('|A','|A|B|A|D|G|B')+1)+2)
)

编辑1:如果您准备好了解您的位置,就像在您的更新中一样:

vars = Concat(substring(vars ,1,:pos-1), substring(vars,:pos+2))

编辑2:

如果您需要替换到下一个|,则可以使用评论同时使用locationsubstring这样的内容:

vars = CONCAT(SUBSTRING(vars ,1,:pos-1), SUBSTRING(vars,LOCATE('|',vars, :pos+1)))  

DEMO

答案 2 :(得分:0)

我设法通过使用PHP获得了我想要的结果。我已经将$ vars展开到代码中的数组中,然后使用unset($ vars [$ pos])删除设置位置的var。