1. 程式人生 > >SQL必知必會—使用資料處理函式

SQL必知必會—使用資料處理函式

《SQL必知必會》讀書筆記

1.函式

與幾乎所有DBMS都等同地支援SQL語句(如SELECT)不同,每一個DBMS都有特定的函式。事實上,只有少數幾個函式被所有主要的DBMS等同支援。

DBMS函式的差異:

這裡寫圖片描述

可以看到,與SQL語句不一樣,SQL函式不是可移植的。這表示為特定SQL實現編寫的程式碼在其他實現中可能不正常。

2.使用函式

大多數SQL實現支援以下型別的函式。

  • 用於處理文字字串(如刪除或填充值,轉換值為大寫或小寫)的文字函式。
  • 用於在數值資料上進行算術操作(如返回絕對值,進行代數運算)的數值函式。
  • 用於處理日期和時間值並從這些值中提取特定成分(如返回兩個日期之差,檢查日期有效性)的日期和時間函式。
  • 返回DBMS正使用的特殊資訊(如返回使用者登陸資訊)的系統函式。

我們在上一課看到函式用作SELECT語句的列表成分,但函式的作用不僅於此。它還可以作為SELECT語句的其他成分,如WHERE子句中使用,在其他SQL語句中使用等,後面會做更多的介紹。

3.文字處理函式

常用的文字處理函式:

  • LEFT() 返回字串左邊的字元
  • LENGTH() 返回字串的長度
  • LOWER() 將字串轉換為小寫
  • LTRIM() 去掉字串左邊的空格
  • RIGHT() 返回字串右邊的字元
  • RTRIM() 去掉字串右邊的空格
  • SOUNDEX() 返回字串的SOUNDEX()
  • UPPER() 將字串轉換為大寫
SELECT vend_name, UPPER(vend_name) as vend_name_upcase
FROM Vendors

vend_name       vend_name_upcase
Bear Emporium   BEAR EMPORIUM
Bears R Us      BEARS R US
Doll and Inc.  DOLL HOUSE INC.

4.日期和時間處理函式

應用程式一般不使用日期和時間的儲存格式,因此日期和時間函式總是用來讀取、統計和處理這些值。由於這個原因,日期和時間函式在SQL中具有重要的作用。遺憾的是,它們很不一致,可移植性最差。

SQL Serve

SELECT order_num
FROM Orders
WHERE DATEPART(yy,order_date) = 2012

order_num
20005
20006
20007
20008
20009

Access

SELECT order_num
FROM Orders
WHERE DATEPART(yyyy,order_date) = 2012

這個例子中,DATEPART()函式返回日期的一部分。DATEPART()函式有兩個引數,它們分別是返回的成分和從中返回成分的日期。

PostgreSQL類似功能的DATE_PART()函式

SELECT order_num
FROM Orders
WHERE DATE_PART('year',order_date) = 2012

Oracle

Oracle沒有上述兩個函式,不過有幾個可用來完成相同檢索的日期處理函式。

SELECT order_num
FROM Orders
WHERE to_number(t0_char(order_date,'YYYY')) = 2012

在這個例子中,to_char()函式用來提取日期的成分,to_number()用來將提取出的成分轉換為數值,以便能與2012進行比較。

完成相同工作的另一方法是使用BETWEEN操作符:

SELECT order_num 
FROM Orders
WHERE order_date BETWEEN to_date('01-01-2012')
AND to_date('12-31-2012')

在此例子中,Oracle的to_date()函式用來將兩個字串轉換為日期。

MySQL和MariaDB

MySQL和MariaDB使用者可使用名為YEAR()的函式從日期中提取年份:

SELECT order_num
FROM Orders
WHERE YEAR(order_date) = 2012

SQLite

SELECT order_num
FROM Orders
WHERE strftime('%Y',order_date) = 2012

這裡給出的例子提取和使用日期的成分(年)。按月份過濾,可以進行相同的處理,指定AND操作符以及年和月份的比較。

大多數DBMS具有比較日期、執行基於日期的運算、選擇日期格式等的函式。

5.數值處理函式

數值處理函式僅處理數值資料。

在主要DBMS的函式中,數值函式是最一致、最統一的函式。

這裡寫圖片描述