首页 > 解决方案 > PostgreSQL 查询中的部分匹配整数

问题描述

所以在我的 PostgreSQL 10 中,我有一列类型为integer. 此列代表产品代码,应根据另一个代码或部分代码进行搜索。该列的值由三部分组成,一个五位数部分和两个两位数部分。用户只能搜索第一部分,第一第二或第一第二第三。

因此,在我的专栏中,假设123451233用户搜索12345(第一部分)。我希望能够返回123451233. 如果用户也搜索1234512or也是如此123451233

不幸的是,我无法更改列的类型或将一列分成三列(每个部分一列)。我怎样才能做到这一点?我不能使用LIKE. 也许像整数的正则表达式?

谢谢

标签: regexpostgresqlinteger

解决方案


考虑使用简单的算术。 log(value)::int + 1返回 the 的整数部分的位数,value并使用以下方法:

value/(10^(log(value)::int-log(search_input)::int))::int

最后返回value截断为相同数字的数字search_input

search_input = value/(10^(log(value)::int-log(search_input)::int))::int

会成功的。

从字面上看,它更复杂,但也可能比字符串操作更有效。

PS:但是create index idx on your_table(cast(your_column as text));有像搜索这样的索引

select * from your_table
where cast(your_column as text) like search_input || '%';

是国际海事组织最好的情况。


推荐阅读