日期和時間處理函數
日期和時間才用相應的資料類型和特殊的格式存儲,以便能快速和有效地排序或過濾,並且節省物理存儲空間。
一般,應用程式不使用用來儲存日期和時間的格式,因此日期和時間函數總是被用來讀取、和處理這些值。由於這個原因,日期和時間函數在MySQL語言中扮演著重要的角色。
下表列出了某些常用的日期和時間處理函數:
#這是重新複習有where進行資料過濾的一個好時機。到目前為止,我們都是用比較數值和文字的where子句過濾數據,但數據經常需要用日期進行過濾。用日期進行過濾需要注意一些別的問題和使用特殊的MySQL函數。
首先要注意的是MySQL使用的日期格式。無論你何時指定一個日期,不管是插入或更新表值還是用where子句進行過濾,日期必須為格式yyyy-mm-dd。因此,2005年9月1日,給出為2005-09-01.雖然其他的日期格式可能也行,但這是首選的日期格式,因為它排除了多義性(如,04/05/06是2006年5月4日或2006年4月5日或2004年5月6日或...)。
應該總是使用4位數的年份,支援2位數的年份,MySQL處理00-69為2000-2069,處理70-99為1970-1999。雖然它們可能是打算要的年份,但使用完整的4為數位年份更可靠,因為MySQL不必做出任何假設。
因此,基本的日期比較應該很簡單:
輸入:
select cust_id,order_num from orders where order_date = '2005-09-01';
輸出:
分析:此select語句正常運作。它檢索出一個訂單記錄,該訂單記錄的order_date為2005-09-01。
但是,使用 where order_date = '2005-09-01'可靠嗎? order_date的資料類型為datetime。這種類型儲存日期及時間值。範例表中的數值全都具有時間值00:00:00,但實際中很肯能並不總是這樣。如果用目前日期和時間儲存訂單日期,怎麼辦?例如,儲存的 order_date值為2005-09-01 11:30:05,則where order_date = '2005-09-01'失敗。即使給出具有該日期的一行,也不會把它檢索出來,因為where匹配失敗。
解決方法是指示MySQL僅將給出的日期與列中的日期部分進行比較,而不是將給出的日期與整個列值進行比較。為此,必須使用date()函數。 Date(order_date)指示MySQL只提取列的日期部分,更可靠的select語句為:
#輸入:
select cust_id,order_num from orders where Date(order_date) = '2005-09-01';
如果你想要的只是日期,那麼使用Date()是一個良好的習慣,,即使你知道相應的列只包含日期。這樣,如果因為某些原因表中以後有日期和時間值,你的SQL程式碼也不用改變。當然,也存在一個Time()函數,當你只想要時間時,應該使用它。
Date()和Time()都是在MySQL4.1.1中第一次引入的。
在你知道如何用日期進行相等測試後,其他運算元的使用也就很清楚了。
不過,還有一種日期比較需要說明。如果你想檢索出2005年9月下的所有訂單,怎麼辦?簡單的相等測試不行,因為它也要符合月份中的天數。有幾個解決辦法,其中一個如下所示:
輸入:
select cust_id,order_num from orders where Date(order_date) between '2005-09-01' and '2005-09-30';
輸出:
##分析:其中,between操作符用來把2005-09-01和2005-09-30定義為一個要符合的日期範圍。數值處理函數
#數值處理函數只處理數值資料。這些函數一般主要用於代數、三角或幾何運算,因此沒有字串或日期-時間處理函數所使用的那麼頻繁。 諷刺的是,在主要DBMS的函數中,數值函數是最一直以來最統一的函數。下表列出一些常用的數值處理函數:#
以上是日期及時間處理函數及數值處理函數實例(資料處理函數的使用二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!