1,2,3,5,9,7
- >不在(3,7)
(此字符需要删除 - >结果选择1,2,5,9
。
怎么样?
例如:
drop table test.table_4;
create table test.table_4 (
id integer,
list_id text
);
insert into test.table_4 values(1,'1,2,3,5,9,7');
insert into test.table_4 values(2,'1,2,3,5');
insert into test.table_4 values(3,'7,9');
insert into test.table_4 values(5,'1,2');
insert into test.table_4 values(9,'1');
insert into test.table_4 values(7,'5,7,9');
查询:
select list_id from test.table_4 where id not in (3,7) --return 4 row
id list_id
1. 1 '1,2,3,5,9,7'
2. 2 '1,2,3,5'
3. 5 '1,2'
4. 9 '1'
如何删除第1行和第2行中的3和7?
id
1. 1 '1,2,5,9'
2. 2 '1,2,5'
3. 5 '1,2'
4. 9 '1'
答案 0 :(得分:1)
以下内容应该在字符串的开头,字符串的末尾或中间的任何地方处理3或7。它还确保31
中的3和17
中的3不会被替换:
select
list_id,
regexp_replace(list_id, '(^[37],|,[37](,)|,[37]$)', '\2', 'g')
from test.table_4
where id not in (3,7)
说明:
^[37],
匹配字符串开头的3或7后跟逗号。这应该没有任何替代
,[37](,)
匹配字符串中间的a,3或7。这需要用一个逗号替换,该逗号由其周围的括号捕获
[37]$
匹配字符串末尾以逗号开头的3或7。这应该没有任何替代。
\2
用于替换字符串 - 对于上面的第二种情况,这是,
,对于情况1和3,则为空。
答案 1 :(得分:0)
您可以使用以下语句更新所有记录。在下面的示例中,第一个语句将删除找到的任何 DateTime sentOnDateTime = DateTime.SpecifyKind(DateTime.Parse(sentOnString), DateTimeKind.Utc);
。然后执行下一个语句,找到字符串前面有,7
的任何sting。
7
如果您还想删除所有出现的UPDATE test.table_4 SET list_id = REPLACE(list_id, ',7', '')
UPDATE test.table_4 SET list_id = REPLACE(list_id, '7', '')
,请执行以下语句:
3
但是,存储在字符串中搜索agianst,with with等所需的值是一个糟糕的设计。
答案 2 :(得分:0)
您可以使用regexp_replace获得预期的输出:
select id, regexp_replace(list_id,'3,|,7', '','g')
from table_4
where id not in (3,7)
输出:
id regexp_replace
1 1,2,5,9
2 1,2,5
5 1,2
9 1
以下是SQL Fiddle