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




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

    一、数学函数

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

    1.1 数学函数

    绝对值函数abs(x)

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --绝对值函数
    hrdb=> SELECT abs(-10.20) AS result;
     result
    --------
      10.20
    (1 row)
    立方根函数cbrt(dp)

    返回一个浮点数的立方根

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --立方根函数cbrt(dp)
    SELECT cbrt(729.0) AS result;
      result
    -------------------
     9.000000000000002
    向上截取函数ceil(dp or numeric)

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

    返回被除数的商

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

    返回被除数的余数

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

    返回传入参数的平方根

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --平方根函数
    SELECT sqrt(81) AS result;
     result
    --------
          9
    符号函数 sign(dp or numeric)

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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 之间的精度类型值

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> SELECT random();
      random
    --------------------
     0.5765172911994441
    (1 row)
    返回随机字符串

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --返回随机字符串
    hrdb=> SELECT substr(md5(random()::varchar),10,6) AS result;
     result
    --------
     d914dc
    (1 row)
    1.3 三角函数

    正弦函数sin(x)

    返回角度的弧度值

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --正弦函数
    hrdb=> SELECT sin(30) AS result;
      result
    ---------------------
     -0.9880316240928618
    (1 row)
    温馨提示:

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

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> select sind(30);
     sind
    ------
      0.5
    (1 row)
    余弦函数cos(x)

    返回角度的弧度值

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">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)

    返回角度的弧度值

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --正切函数
    hrdb=> SELECT tan(90) AS result;
      result
    --------------------
     -1.995200412208242
    (1 row)

    hrdb=> SELECT tand(90) AS result;
      result
    ----------
     Infinity
    余切函数 cot(x)

    返回角度的弧度值

    示例:

    <strong style="font-family: Verdana, Arial, Helvetica, sans-serif;">
    
    
    <pre class="ql-syntax" spellcheck="false">hrdb=> --余切函数
    hrdb=> SELECT cot(90) AS result;
      result
    ---------------------
     -0.5012027833801532
    (1 row)

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

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

    Speak Your Mind

    *