如何在postgres中检查varchar是否包含'aaa'或'bbb'?
我尝试了myVarchar IN ('aaa', 'bbb')
,但显然,当myvarchar完全等于'aaa'或'bbb'时,它就是真的。
答案 0 :(得分:1)
对于多重相似性检查,在速度和简洁语法方面最佳拟合
SIMILAR TO '%(aaa|bbb|ccc)%'
答案 1 :(得分:0)
你可以使用任何&像运营商一样。
SELECT * FROM "myTable" WHERE "myColumn" LIKE ANY( ARRAY[ '%aaa%', '%bbb%' ] );
答案 2 :(得分:0)
假设这是你的桌子:
CREATE TABLE t
(
myVarchar varchar
) ;
INSERT INTO t (myVarchar)
VALUES
('something aaa else'),
('also some bbb'),
('maybe ccc') ;
-- (some random data, this query is PostgreSQL specific)
INSERT INTO t (myVarchar)
SELECT
random()::varchar
FROM
generate_series(1, 10000) ;
您可以(在所有SQL标准数据库中):
SELECT
*
FROM
t
WHERE
myVarchar LIKE '%aaa%' or myVarchar LIKE '%bbb%' ;
你会得到:
| myvarchar | | :----------------- | | something aaa else | | also some bbb |
特别是对于PostgreSQL,您可以使用具有多个值的(单个)正则表达式来查找:
SELECT
*
FROM
t
WHERE
myVarchar ~ 'aaa|bbb' ;
| myvarchar | | :----------------- | | something aaa else | | also some bbb |
dbfiddle here
如果您需要快速查找,可以使用trigram indexes,如下所示:
CREATE EXTENSION pg_trgm; -- Only needed if extension not already installed
CREATE INDEX myVarchar_like_idx
ON t
USING GIST (myVarchar gist_trgm_ops);
...使用LIKE
的查询会快得多。