暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL之SQL函数介绍及实践(一)

晟数学院 2021-04-16
422

点击“晟数学院”关注我们


为了处理数据库中的业务数据,需要使用SQL函数去适当处理,通常常用的函数都内置在数据库中。但业务需求仅仅依赖于数据库内置的函数远远不够,因此一个数据库如果可以提供自定义函数来实现业务需求,对于数据库本身来说,扩展性更强。在PostgreSQL中,PostgreSQL不仅支持丰富的数据类型,也支持丰富的 SQL 函数。当在 SQL 函数中传入的参数不是 PostgreSQL 期望的数据类型,PostgreSQL 将会尝试在执行 SQL 函数之前,对传入的参数进行隐式转换。同时,PostgreSQL 也支持自定义函数,自定义函数涉及到 PostgreSQL 中的SQL函数扩展内容,属于服务器编程内容,在此处不做详细介绍。


数学函数



PostgreSQL 提供的数学函数主要用来处理数值运算,在PostgreSQL中,所有的数学函数传入的参数可以为精度类型和整型。广泛意义上的数学函数包含数学函数,随机函数,三角函数及双曲函数。


1.1 数学函数





绝对值函数abs(x)

绝对值函数返回一个数值的正数。

示例:

    hrdb=> --绝对值函数
    hrdb=> SELECT abs(-10.20) AS result;
    result
    --------
    10.20
    (1 row)


    立方根函数cbrt(dp)

    返回一个浮点数的立方根

    示例:

      hrdb=> --立方根函数cbrt(dp)
      SELECT cbrt(729.0) AS result;
      result
      -------------------
       9.000000000000002


      向上截取函数ceil(dp or numeric)

      返回等于或者大于传入参数的值

      示例:

        hrdb=> --向上截取函数
        hrdb=> SELECT ceil(15.72) AS result;
        result
        --------
        16
        (1 row)


        hrdb=> SELECT ceil(-121.21) AS result;
        result
        --------
        -121
        (1 row)


        hrdb=> SELECT ceil(18) AS result;
        result
        --------
        18
        (1 row)


        温馨提示:

        向上截取函数还可以用ceiling进行截取,效果和ceil一样。感兴趣的同学可以下去自行验证。


        向下截取函数floor(dp or numeric)

        返回小于或者等于传入浮点数的值

        示例:

          hrdb=> --向下截取函数
          hrdb=> SELECT floor(15.72) AS result;
          result
          --------
          15
          (1 row)


          hrdb=> SELECT floor(-121.21) AS result;
          result
          --------
          -122
          (1 row)


          hrdb=> SELECT floor(18) AS result;
          result
          --------
          18
          (1 row)


          求商函数div(y numeric,x numeric)

          返回被除数的商

          示例:

            hrdb=> --求商函数
            hrdb=> SELECT div(10,3) AS result;
            result
            --------
            3
            (1 row)


            hrdb=> SELECT div(8,4) AS result;
            result
            --------
            2
            (1 row)


            取余函数mod(y numeric,x numeric)

            返回被除数的余数

            示例:

              hrdb=> --取余函数
              hrdb=> SELECT mod(8,3) AS result;
              result
              --------
              2
              (1 row)


              hrdb=> SELECT mod(10,4) AS result;
              result
              --------
              2
              (1 row)


              幂函数power(a dp,b dp)

              返回第一个参数的指定幂次方

              示例:

                hrdb=> --幂函数
                hrdb=> SELECT power(1024,2) AS result;
                result
                ---------
                1048576
                (1 row)


                hrdb=> SELECT power(2,3) AS result;
                result
                --------
                      8


                四舍五入函数round(v numeric,s int)

                返回第一个参数四舍五入后的值

                示例:

                  hrdb=> --四舍五入函数
                  hrdb=> SELECT round(10.28) AS result;
                  result
                  --------
                  10
                  (1 row)


                  hrdb=> SELECT round(10.1824,3) AS result;
                  result
                  --------
                  10.182
                  (1 row)


                  hrdb=> SELECT round(11.124378,4) AS result;
                  result
                  ---------
                  11.1244
                  (1 row)


                  平方根函数sqrt(dp or numeric)

                  返回传入参数的平方根

                  示例:

                    hrdb=> --平方根函数
                    SELECT sqrt(81) AS result;
                    result
                    --------
                          9


                    符号函数 sign(dp or numeric)

                    返回-1 0 1 其中的一个值

                    示例:

                      hrdb=> --符号函数
                      hrdb=> SELECT sign(-10) AS result;
                      result
                      --------
                      -1
                      (1 row)


                      hrdb=> SELECT sign(0) AS result;
                      result
                      --------
                      0
                      (1 row)


                      hrdb=> SELECT sign(13.2) AS result;
                      result
                      --------
                      1
                      (1 row)


                      截取函数 trunc(v numeric,s int)

                      返回传入参数截取指定长度的值,不指定长度,默认为0

                      示例:

                        hrdb=> --截取函数 trunc
                        hrdb=> SELECT trunc(10.25) AS result;
                        result
                        --------
                        10
                        (1 row)


                        hrdb=> SELECT trunc(11.287,2) AS result;
                        result
                        --------
                        11.28
                        (1 row)


                        hrdb=> SELECT trunc(11.2364,3) AS result;
                        result
                        --------
                        11.236
                        (1 row)


                        1.2 随机函数





                        随机函数random()
                        返回0 到 1 之间的精度类型值

                        示例:

                          hrdb=> SELECT random();
                          random
                          --------------------
                          0.5765172911994441
                          (1 row)


                          返回随机字符串

                          示例:

                            hrdb=> --返回随机字符串
                            hrdb=> SELECT substr(md5(random()::varchar),10,6) AS result;
                            result
                            --------
                            d914dc
                            (1 row)


                            1.3 三角函数





                            正弦函数sin(x)

                            返回角度的弧度值

                            示例:

                              hrdb=> --正弦函数
                              hrdb=> SELECT sin(30) AS result;
                              result
                              ---------------------
                              -0.9880316240928618
                              (1 row)


                              温馨提示:

                              可能很多同学都熟悉三角函数的值,认为sin(30),就应该是0.5,即1/2,记住,这里返回的值是弧度值。如果想要返回sin(30)为角度值,在PostgreSQL中使用sind函数来实现。

                              示例:

                                hrdb=> select sind(30);
                                sind
                                ------
                                0.5
                                (1 row)


                                余弦函数cos(x)

                                返回角度的弧度值

                                示例:

                                  hrdb=> --余弦函数
                                  hrdb=> SELECT cos(60) AS result;
                                  result
                                  ---------------------
                                  -0.9524129804151563
                                  (1 row)


                                  hrdb=> SELECT cosd(60) AS result;
                                  result
                                  --------
                                  0.5
                                  (1 row)


                                  正切函数tan(x)

                                  返回角度的弧度值

                                  示例:

                                    hrdb=> --正切函数
                                    hrdb=> SELECT tan(90) AS result;
                                    result
                                    --------------------
                                    -1.995200412208242
                                    (1 row)


                                    hrdb=> SELECT tand(90) AS result;
                                    result
                                    ----------
                                     Infinity


                                    余切函数 cot(x)

                                    返回角度的弧度值

                                    示例:

                                      hrdb=> --余切函数
                                      hrdb=> SELECT cot(90) AS result;
                                      result
                                      ---------------------
                                      -0.5012027833801532
                                      (1 row)


                                      hrdb=> SELECT cotd(90) AS result;
                                      result
                                      --------
                                      0
                                      (1 row)


                                      小结:

                                      以上为常用的数学函数,双曲函数作为三角函数的推导函数,具有和三角函数相同的运算方法,包含加法,乘法,二倍角公式,半角公式等等。感兴趣的同学可以下去进行探究。


                                      推荐阅读

                                      重磅重磅,IT类证书能退税啦!!!

                                      2020-05-27

                                      PostgreSQL数据库 PL/pgsql之入门

                                      2020-04-17




                                      点击“阅读原文”
                                      文章转载自晟数学院,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论