如何在数据库中存储小于/大于

时间:2019-05-09 14:26:19

标签: sql postgresql

是否存在一种常见的模式,如何在数据库(postgresql)中存储这样的条件,然后以简单的方式从数据库中获取这些数据,并在Frontend中将其与我们在Frontend上的值SE进行比较(以获得正确的“值” ”):

condition  value
SE < 2     foo
2 ≤ SE <3  bar
3 ≤ SE <4  foo2
4 ≤ SE     bar2

谢谢

3 个答案:

答案 0 :(得分:3)

这听起来像是Android

的好例子
create table data
(
   valid_between int4range,
   value text
);

insert into data (valid_between, value)
values
('(,2)', 'foo'),  -- from infinity to 2
('[2,3)', 'bar'),
('[3,4)', 'foo2'),
('[4,)', 'bar2');  -- from 4 to infinity

要查找对于值3有效的行,请使用@>运算符

select *
from data
where valid_between @> 3

可以对范围列进行有效索引,以实现快速搜索。

答案 1 :(得分:1)

最简单的方法可能是使两列分别为“下限”和“上限”:

LB    UB    ...
-INF  2
2     3
3     5
4     INF

然后按条件查询某项,请使用类似以下内容的

SELECT value FROM (table) WHERE LB <= SE AND SE < UB;

答案 2 :(得分:0)

仅存储下限,然后使用lead进行实时计算:

Threshold  Value
0          foo
2          bar
3          foob
4          barf

with CTE as
  (
  select t1.*, lead(threshold) over(order by threshold) as nextone
  from my_table
  )
select CTE.value
from CTE
where my_value >= threshold
and (my_value < nextone or nextone is null)