MySQL必知必會 —— 第十一章 使用數據處理函數

使用數據處理函數

1. 函數

函數一般是在數據上執行的,它給數據的轉換和處理提供了方便。
函數沒有SQL的可移植性強
能運行在多個系統上的代碼稱爲可移植的(portable)。相對來說,多數SQL語句是可移植的,在SQL實現之間有差異時,這些差異通常不那麼難處理。而函數的可移植性卻不強。幾乎每種主要的DBMS的實現都支持其他實現不支持的函數,而且有時差異還很大。
爲了代碼的可移植,許多SQL程序員不贊成使用特殊實現的功能。雖然這樣做很有好處,但不總是利於應用程序的性能。如果不使用這些函數,編寫某些應用程序代碼會很艱難。必須利用其他方法來實現DBMS非常有效地完成的工作。
如果你決定使用函數,應該保證做好代碼註釋,以便以後你(或其他人)能確切地知道所編寫SQL代碼的含義。

2. 使用函數

大多數SQL實現支持以下類型的函數。
❑ 用於處理文本串(如刪除或填充值,轉換值爲大寫或小寫)的文本函數。
❑ 用於在數值數據上進行算術操作(如返回絕對值,進行代數運算)的數值函數。
❑ 用於處理日期和時間值並從這些值中提取特定成分(例如,返回兩個日期之差,檢查日期有效性等)的日期和時間函數。
❑ 返回DBMS正使用的特殊信息(如返回用戶登錄信息,檢查版本細節)的系統函數。

2.1 文本處理函數

Upper()將文本轉換爲大寫

select vend_name,Upper(vend_name) as vend_name_upcase
from vendors
order by vend_name;

在這裏插入圖片描述
常用的文本處理函數
在這裏插入圖片描述

2.2 日期和時間處理函數

常用的日期和時間處理函數
在這裏插入圖片描述
應該總是使用4位數字的年份 支持2位數字的年份,MySQL處理00-69爲2000-2069,處理70-99爲1970-1999。雖然它們可能是打算要的年份,但使用完整的4位數字年份更可靠,因爲MySQL不必做出任何假定

檢索出一個訂單記錄,該訂單記錄的order_date爲2005-09-01。

select cust_id,order_num from orders
where order_date = '2005-09-01';

在這裏插入圖片描述
order_date的數據類型爲datetime。這種類型存儲日期及時間值。樣例表中的值全都具有時間值00:00:00,但實際中很可能並不總是這樣。如果用當前日期和時間存儲訂單日期(因此你不僅知道訂單日期,還知道下訂單當天的時間),怎麼辦?比如,存儲的order_date值爲2005-09-01 11:30:05,則WHEREorder_date = '2005-09-01’失敗。即使給出具有該日期的一行,也不會把它檢索出來,因爲WHERE匹配失敗。
解決辦法是指示MySQL僅將給出的日期與列中的日期部分進行比較,而不是將給出的日期與整個列值進行比較。爲此,必須使用Date()函數。Date(order_date)指示MySQL僅提取列的日期部分,更可靠的SELECT語句爲:

select cust_id,order_num as orders
where date(order_date) = '2005-09-01';

如果要的是日期,請使用Date() 如果你想要的僅是日期,則使用Date()是一個良好的習慣,即使你知道相應的列只包含日期也是如此。這樣,如果由於某種原因表中以後有日期和時間值,你的SQL代碼也不用改變。當然,也存在一個Time()函數,在你只想要時間時應該使用它。

如果你想檢索出2005年9月下的所有訂單,怎麼辦?簡單的相等測試不行,因爲它也要匹配月份中的天數
方法一
BETWEEN操作符用來把2005-09-01和2005-09-30定義爲一個要匹配的日期範圍。

select cust_id,order_num as orders
where date(order_date) between '2005-09-01' and '2005-09-30';

在這裏插入圖片描述方法二
一種不需要記住每個月中有多少天或不需要操心閏年2月的辦法

select cust_id,order_num as orders
where year(order_date) = 2005 and month(orde_date) = 9;

2.3 數值處理函數

常用的數值處理函數
在這裏插入圖片描述

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