PostgreSQL 9.5新特性
发布日期:2016-5-2 21:5:22
PostgreSQL 9.5 新增了一个函数,这个函数是width_bucket ,可以用来计算一个值在一个bucket范围内的位置信息,若这个值超出了给定的范围,返回0或总bucket+1。除了用数字来表示,bucket还可以直接用数组来表示。如图1所示 图1 例如: 0.0, 5.0是边界,其中包含0.0,但不包含5.0, 最后一个参数表示一共分为5个bucket。 超出边界,参考代码如下所示: postgres=# select width_bucket(-1, 0.0, 5.0, 5); width_bucket -------------- 0 (1 row) postgres=# select width_bucket(5.0, 0.0, 5.0, 5); width_bucket -------------- 6 (1 row) postgres=# select width_bucket(-0.0000001, 0.0, 5.0, 5); width_bucket -------------- 0 (1 row) postgres=# select width_bucket(5.1, 0.0, 5.0, 5); width_bucket -------------- 6 (1 row) 在边界内: postgres=# select width_bucket(0, 0.0, 5.0, 5); width_bucket -------------- 1 (1 row) postgres=# select width_bucket(1, 0.0, 5.0, 5); width_bucket -------------- 2 (1 row) postgres=# select width_bucket(1.9, 0.0, 5.0, 5); width_bucket -------------- 2 (1 row) postgres=# select width_bucket(1.9999999, 0.0, 5.0, 5); width_bucket -------------- 2 (1 row) postgres=# select width_bucket(2, 0.0, 5.0, 5); width_bucket -------------- 3 (1 row) postgres=# select width_bucket(4.9999, 0.0, 5.0, 5); width_bucket -------------- 5 (1 row) 直接使用数组代表边界: 请注意参数类型必须一致。 postgres=# select width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]); width_bucket -------------- 2 (1 row) postgres=# select width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamp[]); ERROR: function width_bucket(timestamp with time zone, timestamp without time zone[]) does not exist LINE 1: select width_bucket(now(), array['yesterday', 'today', 'tomo... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. postgres=# select width_bucket(1,'{0,1,100,200,300}'::int[]); width_bucket -------------- 2 (1 row) 边界表示如下所示,因此1落在第二个bucket。 [0,1) [1,100) [100,200) [200,300) 后面会更新一些关于mssql的相关文章,关心mssql的童鞋敬请期待。
|