【发布时间】:2022-10-13 14:45:09
【问题描述】:
你好,我需要一个在数据库中搜索并返回与起始字符最相似的行并带有一个值。 想象一下,给定的字符串是'abcdefghijklmnop' 我们的数据库表有一个名为 x 的列,对于该列,行是: 1-'一个' 2-'ABC' 3- 'absde' 4-'abcdef' 5-'abcdefg' 6-'1abcdefg'
它应该返回第 5 行
【问题讨论】:
标签: sql django django-models
你好,我需要一个在数据库中搜索并返回与起始字符最相似的行并带有一个值。 想象一下,给定的字符串是'abcdefghijklmnop' 我们的数据库表有一个名为 x 的列,对于该列,行是: 1-'一个' 2-'ABC' 3- 'absde' 4-'abcdef' 5-'abcdefg' 6-'1abcdefg'
它应该返回第 5 行
【问题讨论】:
标签: sql django django-models
在 postgres 中存在一个相似度函数,首先创建包含它的扩展
create extension pg_trgm;
之后使用这样的相似度百分比进行选择(例如 80% 或您想要的值)
select x from "table" where similarity('abcdefghijklmnop', x)>0.35;
或者最相似的字符串是
select * from "table" order by similarity('abcdefghijklmnop', x) desc limit 1;
小提琴http://sqlfiddle.com/#!17/c901e/2 和文档https://www.postgresql.org/docs/current/pgtrgm.html
【讨论】:
我发现的最好的是: 选择身份证, 从表 WHERE '3552' LIKE 前缀 || '%' ORDER BY 前缀 DESC 限制 1
谢谢你们
【讨论】: