下面的例子使用了時間函數。以下詢問選擇了最近的 30天內所有帶有date_col 值的記錄:
mysql> SELECT something FROM tbl_name
-> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;
注意,這個詢問也能選擇將來的日期記錄。
用於日期值的函數通常會接受時間日期值而忽略時間部分。而用於時間值的函數通常接受時間日期值而忽略日期部分。
返回各自當前日期或時間的函數在每次詢問執行開始時計算一次。這意味著在一個單一詢問中,對諸如NOW() 的函數多次訪問總是會得到同樣的結果(未達到我們的目的,單一詢問也包括對儲存程式或觸發器和被該程式/觸發器調用的所有子程式的調用 )。這項原則也適用於 CURDATE()、 CURTIME()、 UTC_DATE()、 UTC_TIME()、UTC_TIMESTAMP(),以及所有和它們意義相同的函數。
CURRENT_TIMESTAMP()、 CURRENT_TIME()、 CURRENT_DATE()以及FROM_UNIXTIME()函數返回串連當前時區內的值,這個值可用作time_zone系統變數的值。此外, UNIX_TIMESTAMP() 假設其參數為一個當前時區的時間日期值。
以下函數的論述中傳回值的範圍會請求完全日期。 若一個日期為“零” 值,或者是一個諸如'2001-11-00'之類的不完全日期, 提取部分日期值的函數可能會返回 0。 例如, DAYOFMONTH('2001-11-00') 會返回0。
ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days)
當被第二個參數的INTERVAL格式啟用後, ADDDATE()就是DATE_ADD()的同義字。相關函數SUBDATE() 則是DATE_SUB()的同義字。對於INTERVAL參數上的資訊 ,請參見關於DATE_ADD()的論述。
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
若 days 參數只是整數值,則 MySQL 5.1將其作為天數值添加至 expr。
mysql> SELECT ADDDATE('1998-01-02', 31);
-> '1998-02-02'
◆ ADDTIME(expr,expr2)
ADDTIME()將 expr2添加至expr 然後返回結果。 expr 是一個時間或時間日期運算式,而expr2 是一個時間運算式。
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999',
-> '1 1:1:1.000002');
-> '1998-01-02 01:01:01.000001'
mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
-> '03:00:01.999997'
◆ CONVERT_TZ(dt,from_tz,to_tz)
CONVERT_TZ() 將時間日期值dt 從from_tz 給出的時區轉到to_tz給出的時區,然後返回結果值。
在從若from_tz 到UTC的轉化過程中,該值超出 TIMESTAMP 類型的被支援範圍,那麼轉化不會發生。
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
-> '2004-01-01 22:00:00'
注釋:若要使用諸如 'MET'或 'Europe/Moscow'之類的指定時間區,首先要設定正確的時區表。