String包含一些其他字符串

时间:2017-05-11 18:48:56

标签: postgresql

如何在postgres中检查varchar是否包含'aaa'或'bbb'?

我尝试了myVarchar IN ('aaa', 'bbb'),但显然,当myvarchar完全等于'aaa'或'bbb'时,它就是真的。

3 个答案:

答案 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标准方法:

您可以(在所有SQL标准数据库中):

 SELECT
     *
 FROM
     t
 WHERE
     myVarchar LIKE '%aaa%' or myVarchar LIKE '%bbb%' ;

你会得到:

 | myvarchar          |
 | :----------------- |
 | something aaa else |
 | also some bbb      |
 

PostgreSQL特定方法

特别是对于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的查询会快得多。