PostgreSQL 9.5新特性
  • 1
  • 2
  • 3
  • 4
  • 5
  • mssql数据库问题
    无极荣耀注册-无极荣耀首页-无极荣耀登录
    发布日期: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的童鞋敬请期待。