144得票8回答
在PostgreSQL中使用LIKE、SIMILAR TO或正则表达式进行模式匹配 在PostgreSQL中,您可以使用LIKE、SIMILAR TO或正则表达式来执行模式匹配操作。这些功能允许您根据特定的模式或规则搜索和过滤数据。 LIKE是一种基本的模式匹配方法,它使用通配符来匹配字符串。通配符包括百分号(%)和下划线(_),它们分别表示任意字符和单个字符。例如,使用LIKE 'abc%'将匹配以"abc"开头的任何字符串。 SIMILAR TO是一种更高级的模式匹配方法,它使用正则表达式来定义模式。正则表达式是一种强大的工具,可以用于更复杂的模式匹配需求。例如,使用SIMILAR TO 'a(b|c)%'将匹配以"a"开头,后跟"b"或"c"的任何字符串。 如果您需要更灵活和精确的模式匹配,可以使用正则表达式函数。PostgreSQL提供了一组内置的正则表达式函数,如regexp_match、regexp_replace和regexp_split_to_array等。这些函数允许您根据自定义的正则表达式模式对字符串进行匹配、替换和拆分。 无论您选择使用哪种模式匹配方法,都可以通过结合其他查询条件和运算符来进一步筛选和排序数据。例如,您可以使用LIKE 'abc%' AND age > 18来查找以"abc"开头且年龄大于18的记录。 总之,在PostgreSQL中,您有多种选择来执行模式匹配操作。根据您的需求和数据特点,选择合适的方法,并结合其他查询条件来实现更精确的数据过滤和搜索。

我需要写一个简单的查询,查找以B或D开头的人名: SELECT s.name FROM spelers s WHERE s.name LIKE 'B%' OR s.name LIKE 'D%' ORDER BY 1 我在想是否有办法重写这段代码以提高性能。这样我就可以避免使用or和/...

31得票1回答
为什么要在文本列上使用 text_pattern_ops 索引?

今天七周七大数据库向我介绍了按操作员索引。 只要将值以小写形式索引,您就可以通过创建text_pattern_ops操作员类索引来为先前的查询创建模式匹配字符串的索引。 CREATE INDEX moves_title_pattern ON movies ( (lower(t...

29得票2回答
如何创建一个索引来加快对表达式的聚合LIKE查询?

我在标题中可能问错了问题。以下是事实: 我的客服人员抱怨我们基于Django的网站管理界面上进行客户查找时响应时间慢。 我们使用的是Postgres 8.4.6。我开始记录慢查询,并发现了这个罪魁祸首: SELECT COUNT(*) FROM "auth_user" WHERE UPP...

25得票3回答
How is LIKE implemented?

有人能解释一下在当前数据库系统(如MySQL或Postgres)中LIKE操作符是如何实现的吗?或者给我指点一些可以解释这个问题的参考资料? 天真的方法是检查每条记录,在感兴趣的字段上执行正则表达式或部分字符串匹配,但我有一种感觉(希望)这些系统会做得更聪明一些。

18得票1回答
从GIN索引的TSVECTOR列获取部分匹配

我想通过查询来获取结果。 SELECT * FROM ( SELECT id, subject FROM mailboxes WHERE tsv @@ plainto_tsquery('avail') ) AS t1 ORDER BY id DESC; 这个工作...

18得票2回答
PostgreSQL在ARRAY字段上的LIKE查询

有没有办法在Postgres的ARRAY字段上进行LIKE查询? 目前我想要这样的功能: SELECT * FROM list WHERE lower(array_field) LIKE '1234%' 目前不需要太多的降低。然而,它应该在数组中找到一个匹配的字段。这真的可能吗? 目...

18得票2回答
当搜索字符串变得更长时,三元组搜索的速度会变得更慢。

在Postgres 9.1数据库中,我有一个名为table1的表,大约有150万行,以及一个名为label的列(为了简单起见,在此问题中使用了简化的名称)。 在lower(unaccent(label))上存在一个功能性的trigram索引(unaccent()已被设置为不变以允许在索引中使...

16得票3回答
寻找最长前缀的算法

我有两张表。 第一张是一个带有前缀的表。 code name price 343 ek1 10 3435 nt 4 3432 ek2 2 第二个是带有电话号码的通话记录。 number time 834353212 10 834321242 ...

16得票1回答
最佳相似度函数的指标

所以我有一个包含620万条记录的表格,我需要对其中一列进行相似性搜索查询。 查询可以是: SELECT "lca_test".* FROM "lca_test" WHERE (similarity(job_title, 'sales executive') > 0.6) AND...

13得票3回答
SQL Server: 使用通配符进行替换?

Microsoft SQL Server本身是否支持使用通配符的replace函数?我了解到正则表达式在SQL Server中是不可用的。 我注意到有一个PATINDEX函数可以用来拼凑出一个解决方案 - 是否有更简单的方法呢? 例如,使用REPLACE(data,'[xy]','q')来...