Sql 先按最匹配的记录排序
给出以下查询:Sql 先按最匹配的记录排序,sql,postgresql,Sql,Postgresql,给出以下查询: select * from users where first_name ilike '%foo%' OR last_name ilike '%bar%' OR nickname ilike '%foobar%' 返回: first_name| last_name | nickname ---------------------------------------- Foo | ABC | abcd Foo | DE
select * from users
where first_name ilike '%foo%'
OR last_name ilike '%bar%'
OR nickname ilike '%foobar%'
返回:
first_name| last_name | nickname
----------------------------------------
Foo | ABC | abcd
Foo | DEF | efgh
Foo | BAR | ijkl
AMD | Bar | foobar
Foo | Bar | foobar2
问题:
first_name| last_name | nickname
----------------------------------------
Foo | Bar | foobar2
Foo | BAR | ijkl
AMD | Bar | foobar
Foo | ABC | abcd
Foo | DEF | efgh
如何首先对最相关(匹配)的值进行排序?
我指的是在Where.中匹配多个模式的most匹配。。或
预期结果:
first_name| last_name | nickname
----------------------------------------
Foo | Bar | foobar2
Foo | BAR | ijkl
AMD | Bar | foobar
Foo | ABC | abcd
Foo | DEF | efgh
按点击次数排序:
... ORDER BY (first_name ILIKE '%foo%')::integer
+ (last_name ILIKE '%bar%')::integer
+ (nickname ILIKE '%foobar%')::integer DESC
您需要UTL\u匹配。编辑距离\u相似性(col1,col2)() UTL_MATCH.edit_distance_similarity返回相似性的百分比,即
- 超人=超人=>100[%]
- 超人=超人=>88[%]
PostgreSQL中没有
UTL_匹配
。我根据您的评论@LaurenzAlbe扩展了我的答案,但在提到fuzzystrmatch模块时留下了它。
SELECT soundex('Anne'), soundex('Ann'), difference('Anne', 'Ann');