如果用字元匹配功能,要求字串同時含有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裡用到的字段上建索引,加快匹配速度。