我在设计数据库时出现了一个奇怪的情况。我有这样的情况,一个字段的值的类型可以是一个正常的整数或范围之间的数字。我用一个例子来解释我自己:数值范围数据类型postgresql
列时间可以是数字(18)或范围在(18-30)之间。我如何用postgresql来表示这个?
THX!
我在设计数据库时出现了一个奇怪的情况。我有这样的情况,一个字段的值的类型可以是一个正常的整数或范围之间的数字。我用一个例子来解释我自己:数值范围数据类型postgresql
列时间可以是数字(18)或范围在(18-30)之间。我如何用postgresql来表示这个?
THX!
有几种不同的方法来做到这一点。
啊太棒了!谢谢!!我想在第一个选项:)但第三个是更多我需要的!超 –
您可以创建一个更大的数字,例如18 x 1000 + 0 = 18000
为18,18 x 1000 + 30 = 18030
为(18,30)。
当您检索它时,第一个数字为first = round(number/1000)
,第二个数字为second = number - first
。
您还可以将它们存储为点http://www.postgresql.org/docs/9.4/static/datatype-geometric.html#AEN6730。
一个整数range可以表示一个整数值和一个范围。单值:
select int4range(18,18,'[]');
int4range
-----------
[18,19)
上述结果中的")"
表示独占。
范围:
select int4range(18,30,'[]');
int4range
-----------
[18,31)
Postgres有一个内置的[整数范围类型](http://www.postgresql.org/docs/9.4/static/rangetypes.html) –
另外一个内置在'numrange'(对于'numeric'范围),或者[你可以创建额外的范围类型](http://www.postgresql.org/docs/current/static/rangetypes.html#RANGETYPES-DEFINING)。 – pozs