我需要找出删除前导和尾随单引号的SQL命令,但如果字符串中有撇号,我不想删除它们(例如:'isn't'
,我想成为isn “t`)。
我不是代码编写者,所以这对我来说有点困难。我想我可以用:
UPDATE table1 SET notes = REPLACE(notes, '\'', '');
但是那会消除所有并且不会留下任何撇号,我相信。那么我该如何删除字符串开头和字符串结尾的单引号?
我感谢任何帮助。
答案 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行)