• 1
  • 2
  • 3
  • 4
  • 5
mssql数据库问题 首 页  »  帮助中心  »  数据库  »  mssql数据库问题
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的童鞋敬请期待。