1. 程式人生 > >【SQL必知必會】筆記 函式

【SQL必知必會】筆記 函式

  1. 與其他大多數計算機語言一樣, SQL支援利用函式來處理資料。函式一般是在資料上執行的,它給資料的轉換和處理提供了方便。
  2. 可移植性:能執行在多個系統上的程式碼。 相對來說,多數SQL語句是可移植的,不同的DBMS之間實現使用函式有較大的差異也就是說函式的可移植性卻不強。幾乎每種主要的DBMS的實現都支援其他實現不支援的函式。
  3. 使用函式時,要做好程式碼註釋,以便以後你(或其他人)能確切地知道所編寫SQL程式碼的含義。
  4. 常用的函式可分為文字處理函式(如刪除或填充值,轉換值為大寫或小寫) 、數值運算函式(如返回絕對值,進行代數運算)、時間和日期處理函式(返回兩個日期之差,檢查日期有效性等 )、系統函式(返回DBMS正使用的特殊資訊(如返回使用者登入資訊,檢查版本細節

文字處理函式

下表是一些常用的文字處理的函式 在這裡插入圖片描述

除此之外,還有upper()函式,將字母轉換成大寫。 以upper()函式為例:

SELECT vend_name,UPPER(vend_name) FROM vendors;

顯示結果如下 在這裡插入圖片描述

文字函式中需要進一步說明的是SOUNDEX函式。SOUNDEX函式是一個將任何文字轉換為描述其語音表示的字母數字模式的演算法。 SOUNDEX考慮了類似的發音字元和音節,使得能對串進行發音比較而不是字母比較。 下面給出一個使用Soundex()函式的例子。 customers表中有一個顧 客Coyote Inc.,其聯絡名為Y.Lee。但如果這是輸入錯誤,此聯絡名實際應該是Y.Lie。顯然,按正確的聯絡名搜尋不會返回資料 。 使用Soundex()函式進行搜尋,它匹配所有發音類似於Y.Lie的聯絡名:

SELECT cust_name, cust_contact FROM customers WHERE Soundex(cust_contact) = Soundex('Y Lie');

輸出結果如下: 在這裡插入圖片描述

在這個例子中, WHERE子句使用Soundex()函式來轉換cust_contact列值和搜尋串為它們的SOUNDEX值。因為Y.Lee和Y.Lie發音相似,所以它們的SOUNDEX值匹配,因此WHERE子句正確地過濾出了所需的資料。

日期和時間處理函式

在這裡插入圖片描述

MySQL使用日期格式基本上都是yyyy-mm-dd格式,並且是使用4位數字的年份 。 因此, 2005年9月1日,給出為2005-09-01。雖然其他的日期格式可能也行,但這是首選的日期格式,因為它排除了多義性(如,04/05/06是2006年5月4日或2006年4月5日或2004年5月6日或……)

例如,要篩選出訂單日期為2005年9月1日的id和訂單號:

SELECT cust_id, order_num FROM orders WHERE order_date ='2005-09-01' ;

在這裡插入圖片描述

這是比較理想的狀態,但是,如果存 儲 的 order_date 值不是 ‘2005-09-01’, 而是’2005-09-01 11:30:05’,不僅僅有日期還有時間,那麼WHERE order_date = ‘2005-09-01’ 就無法篩選出2005年9月1日的訂單了。 解決辦法是指示**MySQL僅將給出的日期與列中的日期部分進行比 較,而不是將給出的日期與整個列值進行比較。**為此,必須使用Date()函式。 Date(order_date)指示MySQL僅提取列的日期部分。

SELECT cust_id, order_num FROM orders WHERE DATE(order_date) ='2005-09-01' ;

因此,如果你只想要日期,請養成使用DATE()的好習慣;如果你只想要時間,請用TIME()函式。

另一種情況,如果你想檢索出2005年9月下的所有訂單,怎麼辦? 有兩種方法。第一種方法是使用between and 來限定時間範圍,

SELECT cust_id, order_num FROM orders WHERE DATE(order_date)  BETWEEN '2005-09-01'  AND '2005-09-30';

第二種方法是使用year()函式和month()函式分別提取年份和月份

SELECT cust_id, order_num FROM orders WHERE YEAR(order_date)='2005' AND MONTH(order_date)='09';  

數值處理函式

常用的數值處理函式如下

在這裡插入圖片描述 比較簡單實用,此處就不舉例了。