regex - PostgreSQL 查询中的部分匹配整数
问题描述
所以在我的 PostgreSQL 10 中,我有一列类型为integer
. 此列代表产品代码,应根据另一个代码或部分代码进行搜索。该列的值由三部分组成,一个五位数部分和两个两位数部分。用户只能搜索第一部分,第一第二或第一第二第三。
因此,在我的专栏中,假设123451233
用户搜索12345
(第一部分)。我希望能够返回123451233
. 如果用户也搜索1234512
or也是如此123451233
。
不幸的是,我无法更改列的类型或将一列分成三列(每个部分一列)。我怎样才能做到这一点?我不能使用LIKE
. 也许像整数的正则表达式?
谢谢
解决方案
考虑使用简单的算术。
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 || '%';
是国际海事组织最好的情况。
推荐阅读
- ruby-on-rails - 在 ROR 中实施尼泊尔日期时间
- jquery - 如何在jquery中使用每个并将数据推送到数组
- python - 如何使用 XGB 反转 TargetEncoder 后训练以获得特征重要性?
- c# - ASP.NET Core MVC 中的 TreeView(来自 SQL 的数据)
- python - 比较python中的list和int
- python-3.x - 如何为python中的每个值和一个键做反向字典?
- c - 为什么我的自制函数又增加了 1 个?
- python - HTML Python/Flask 传递值 (int)
- css - 将背景图像应用于形状
- c++ - 这两个表达有什么区别