PostgreSQL之SQL函式介紹及實踐(一)

晟數學院發表於2020-06-30

為了處理資料庫中的業務資料,需要使用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)

小結:

以上為常用的數學函式,雙曲函式作為三角函式的推導函式,具有和三角函式相同的運算方法,包含加法,乘法,二倍角公式,半形公式等等。感興趣的同學可以下去進行探究。

相關文章