在PostgreSQL中查找字符串,并按距离排序到字符串的开头

时间:2015-06-23 17:48:13

标签: postgresql

我正在尝试编写一个查询部分字符串的查询,但是通过靠近字符串前面的顺序排序。它适用于类型应用程序。

这是我目前的查询:

SELECT  DISTINCT ON (full_name) full_name
FROM users
WHERE (lower(full_name) LIKE 'q%' OR lower(full_name) LIKE '%q%')
LIMIT 10

但它似乎没有按照我期望的方式排序。

因此,如果我搜索“宠物”,我想在peter smith之前返回petra glifabigail peters

是否可以用这种方式编写where子句?我们目前没有在数据库中安装任何模糊文本搜索模块,因此我希望尽可能避免这样做。

2 个答案:

答案 0 :(得分:2)

您可以使用position(string in string)函数:

order by position(lower('pet') in lower(full_name))

http://www.postgresql.org/docs/9.1/static/functions-string.html

答案 1 :(得分:2)

您可以使用布尔表达式full_name ILIKE 'q%'作为排序顺序。

SELECT * 
FROM (
    SELECT DISTINCT full_name
    FROM users
    WHERE full_name ILIKE '%q%'
    ) alias
ORDER BY full_name ILIKE 'q%' DESC, full_name
LIMIT 10

请注意,ILIKE运算符不区分大小写LIKE

您可能也对Full Text Search感兴趣。