關於各種函數用法--MySQL系列

特意記錄以下函數的用法筆記,就是單純爲了記錄,畢竟函數東西好用但是不好記,記下這篇以方便查閱。
準備①先學會使用mysql②學會了去弄清楚原理③在之後想想怎麼優化。三步走。
目前處於第一步。


關於函數

相對來說,多數SQL語句是可移植的。而函數的可移植性卻並不強,幾乎每種主要的DBMS的實現都支持這不同形狀的函數,有時差異還會很大。

所以再寫mysql代碼時。要養成一個良好的習慣:決定使用函數時,應該保證做好代碼註釋,以便以後你或其他人能確切的知道所編寫的SQL代碼的含義。

大多數SQL實現支持以下類型的函數:

  • 處理文本函數(刪除或填充值,轉換大小寫等)
  • 在數值上進行算數操作的數值函數(返回絕對值等)
  • 日期和時間函數(返回日期之差、檢查日期有效性等)
  • 返回DBMS正使用的特殊信息的系統函數(返回用戶登錄信息、檢查版本細節等)

首先第一部分是文本處理函數
有上面提到過的ltrim、rtrim、trim
還有upper()函數

select name, upper(name) as upname from vendors order by name;

在這裏插入圖片描述
在這裏插入圖片描述
其中要記一下soundex()
因爲這個不提看不懂。。。。😅

soundex可以將任何文本串轉換爲描述其語音表示的字母數字模式的算法。,多數DBMS都對soundex提供支持。

select name, contact from vendors where soundex(contact) = soundex('Y lie');
關於日期和時間處理函數

因爲呢一般情況下我們的應用程序並不使用DBMS中用來存儲日期和時間的格式。所以就有了日期和時間函數用來讀取、統計和處理這些值。

因此日期和事件處理函數在MySQL語言中具有重要的作用。

在這裏插入圖片描述

注意MySQL使用的日期格式:yyyy-mm-dd;雖然其他日期也可以,但這是首選的日期格式。

select id, num from orders where order_date = '2005-09-01';

這裏需要記以下,order_date的數據類型是datetime,這種類型不僅儲存日期,還儲存時間值。
當我們只需要某天的時候,就需要date()函數。
date(order_date)指示MySQL僅提取列的日期部分,就可以選中某天了。

select id, num from orders where date(order_date) = '2005-09-01';//這句顯然更優。

因此,只要日期的情況,就使用date()這是個好習慣,就算數據裏真的只包含了日期。

當需要檢索某個月的時候,比如想要檢索2020年二月的時候怎麼辦,結合之前學的知識加上本章,暫時有以下兩種方法:

select id, num from orders where Date(order_date) between '2020-02-01' and '2020-02-29'; 

2020二月有二十九天,但有些並沒意識到,比如今早我看到微博有人拍了張風景圖,然後配上字兒:三月一號的清晨。 對於這些沒意識到今年是閏年的人更推薦用下面那種方法,不需要記每個月有幾天,更不容易出錯。

select id, num from orders where year(order_date) = 2005 and mouth(order_date) = 9;//清晰明瞭
關於數值處理函數

在這裏插入圖片描述
全部都是通俗易懂的函數。略了,有表就行。


關於彙總函數

顧名思義,彙總得到整體的某些值。需要用到聚集函數。

在這裏插入圖片描述
關於avg()

select avg(price) as avg_price from products;
select avg(price) as avg_prirce from products where id = 1003;

avg只用於單個列,要想獲得多個列的avg值,就需要多個avg函數。
並且avg函數忽略null;

關於count()

select count(*) as num_cust from products;
select count(cust_email) as num_cnt from customers; //計算出有email的用戶的個數。

關於max()—用法同min()

select max(price) as max_price from products;

關於sum()

select sum(quantity) as items_ordered from orderitems where num = 2005;//計算出所有num等於2005的物品的質量總和。
select sum(price*auantity) as total_price from orderitems where num = 2005;//這裏上面的函數也都可以這麼使用。

關於distinct參數

select avg(distinct price) as avg_price from products where id =1003; //計算id等於1003的所有不同價格的平均值。

注意distinct不能用於count(*),也就是說distinct必須使用列名。不能用於計算或表達式。

可以用max和min但是沒有意義。

關於組合聚集函數

select count(*) as num_items,
min(price) as price_min,
max(price) as price_max,
avg(price) as price_avg
from pruducts;

ok。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章