如果用字符匹配功能,要求字符串同时含有a,b,c,除了像你那样用 and 连接 like 也想不出什么其他好办法。如果把字符串打散成一个array,转而判断集合的包含关系,可以这样:
select * from (values('cabbage'), ('black'), ('sblunc')) as articles(link)
where array['a','b','c'] <@ regexp_split_to_array(link, E'\\s*');
link
---------
cabbage
black
(2 行记录)
如果用字符匹配功能,要求字符串同时含有a,b,c,除了像你那样用 and 连接 like 也想不出什么其他好办法。如果把字符串打散成一个array,转而判断集合的包含关系,可以这样:
你说的 patindex 和 charindex 在 SQL Server里有,其他的sql这些函数可能有替代的,具体不是很清楚。
用
like '%a%'是要作大死的节奏呀,这子句严重影响执行效率,目测你是想把link包含有字符串'a'的都选择出来,那你应该用下面这句。没区别,||是postgresql的拼接符,'a'||'b'拼起来就是'ab'。
Python没用过,不知道,有个list你到底是想同时满足list里所有元素还是满足任一即可?你这SQL用and连接可是要满足所有的,如果是满足任一一个,可以用or,也可以用in,但是like和in的效率问题你自己得试试。
patindex就是查第一个参数在第二个参数的什么位置,返回位置号,不过这是SQL Server专用的,在postgresql里可以用strpos(string, substring)代替。
另外注意两点,第一,like避免在开头使用%匹配,否则效率很慢,第二,尽量在where里用到的字段上建索引,加快匹配速度。