Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中查找字符串并按到字符串开头的距离排序_Postgresql - Fatal编程技术网

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

在PostgreSQL中查找字符串并按到字符串开头的距离排序,postgresql,Postgresql,我试图编写一个查询,查找部分字符串,但顺序是根据字符串前面的接近程度。这是一个提前打印的应用程序 以下是我目前的查询: SELECT DISTINCT ON (full_name) full_name FROM users WHERE (lower(full_name) LIKE 'q%' OR lower(full_name) LIKE '%q%') LIMIT 10 但它似乎不像我预期的那样有序 因此,如果我搜索“宠物”,我想在abigail peters之前返回peter smith和

我试图编写一个查询,查找部分字符串,但顺序是根据字符串前面的接近程度。这是一个提前打印的应用程序

以下是我目前的查询:

SELECT  DISTINCT ON (full_name) full_name
FROM users
WHERE (lower(full_name) LIKE 'q%' OR lower(full_name) LIKE '%q%')
LIMIT 10
但它似乎不像我预期的那样有序

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

可以这样写where子句吗?我们目前没有在数据库中安装任何模糊文本搜索模块,因此如果可能的话,我希望避免这样做。

您可以使用position(字符串中的子字符串)功能:

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

您可以使用布尔表达式
全名,例如'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
注意,对于不区分大小写的
LIKE
,有
ILIKE
操作符


您可能也对此感兴趣。

我喜欢这个答案的外观,但我得到以下
错误:SELECT DISTINCT ON expressions必须按表达式匹配初始顺序
,一些谷歌搜索告诉我,我无法解决此问题。我编辑了上面的查询。获取我的查询并用David的建议替换
order by
。如果你喜欢这个想法(我喜欢!),那么答案值得投票。