从字符串中删除前导和尾随单引号

时间:2015-02-16 00:04:14

标签: sql replace

我需要找出删除前导和尾随单引号的SQL命令,但如果字符串中有撇号,我不想删除它们(例如:'isn't',我想成为isn “t`)。

我不是代码编写者,所以这对我来说有点困难。我想我可以用:

UPDATE table1 SET notes = REPLACE(notes, '\'', '');

但是那会消除所有并且不会留下任何撇号,我相信。那么我该如何删除字符串开头和字符串结尾的单引号?

我感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您可以对第一个和最后一个字符进行天真检查。对于MYSQL,您可以这样做:

UPDATE table1 SET notes = SUBSTRING(notes, 
                 CASE WHEN LEFT(notes, 1) = '''' THEN 2 ELSE 1 END, 
                 LENGTH(notes) - CASE WHEN LEFT(notes, 1) = '''' THEN 1 ELSE 0 END 
                             - CASE WHEN RIGHT(notes, 1) = '''' THEN 1 ELSE 0 END)

答案 1 :(得分:0)

我没有可以立即测试的数据库,但是这行的内容应该有效:

UPDATE table1 SET notes = replace(trim(REPLACE(notes, '/'', '          ')),'          ','/'');

工作原理:

用10个空格替换所有单引号(实际上你在列中没有10个空格的实例吗?)然后修剪结果然后将10个空格的每个实例替换回单个引号。

因为我不知道你正在使用什么数据库,所以你需要使用语法,你可能必须使用ltrim和rtrim的组合,因为“Trim”并不适用于每个db包。修剪是一个简单的命令,只是从字符串中删除起始和结束空格。

当然,在现场桌面上执行此操作之前,暂不对它进行测试。

答案 2 :(得分:-1)

肮脏但有效的方式:

  

create table stest(id serial,test text);

     

插入stest(测试)值(' isn'' t');
  插入stest(测试)值(''' isn''');

     

插入stest(测试)值('''''''''')

     

插入stest(测试)值(''''''')

     

插入stest(测试)值('''''''''''#39 );

     

从stest中选择*;

id│测试
────┼───────────────

1│不是

2│'不是

3│'不是'

4│不是'

5│不是' ' ISN'吨

(5行)

首先作为(选择ID,regexp_replace(测试,' ^'''''')来自stest), 第二个(选择id,regexp_replace(t,''' $','')从第一个开始), 第三个(选择id,regexp_replace(t,'''''')作为第二个t), 第四个(选择id,regexp_replace(t,'''''')as t from third) 从第四个f更新stest s set test = t,其中s.id = f.id;

  

从stest中选择*;    id│测试

────┼─────────────

1│不是

2│不是

3│不是

4│不是

5│不是

(5行)