Oracle采用date類型表示日期時間,這是一個7字節的固定寬度的數據類型,有7個屬性,包括:世紀、世紀中哪一年、月份、月中的哪一天、小時、分鍾和秒。本文中把date類型稱為日期時間類型,簡稱日期。
對編程語言來說,日期是用字符串來顯示和書寫的,如果設置了NLS_DATE_FORMAT環境變量,Oracle可以自動的對日期和字符串進行轉換,但是,程序員更多的是采用to_char和to_date兩個函數對日期和字符串進行轉換。
一、把日期轉換為字符串
to_char函數把日期轉換成字符串,一般用於 select 和 from 之間的字段列表中的日期輸出,語法如下:
to_char(日期,格式)
日期格式用字符串來表達,格式控制標識如下,加粗顯示的是常用的格式:
d:一周中的星期幾。
day:天的名字,使用空格填充到9個字符。
dd:月中的第幾天。
ddd:年中的第幾天。
dy:天的簡寫名。
iw:ISO標准的年中的第幾周。
iyyy:ISO標准的四位年份。
yyyy:四位年份。
yyy,yy,y:年份的最后三位,兩位,一位。
hh:小時,按12小時計。
hh24:小時,按24小時計。
mi:分。
ss:秒。
mm:月。
mon:月份的簡寫。
month:月份的全名。
w:該月的第幾個星期。
ww:年中的第幾個星期。
舉例:
二、把字符串轉換日期
to_date函數把字符串轉換成日期,一般用於insert、update和where之后的條件中的日期輸入,語法如下:
to_date(字符串表示的日期,格式)
日期格式用字符串來表達,與to_char函數相同。
先創建一個用於測試的表tt。
create table tt ( c1 date);
舉列:
在update語句中把字符串轉換為日期。
在where條件中把字符串轉換為日期。
三、日期運算
Oracle數據庫提供了多種對日期加減的計算方法。
為了方便日期的顯示,先設置好NLS_DATE_FORMAT環境變量,這個環境變量的用法在本文的“四、日期環境變量”章節中介紹。
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
1、直接加減
可以在日期上進行加減一個小數(單位是天)得到一個新的時間。
1)取當前時間和一天后的時間。
2)取當前時間和一小時后的時間。
3)獲取當前時間和一秒后的時間。
2、add_months函數
對日期直接加減的方式不用於月的加減,因為每月的天數不一樣,例如2020-01-01,加上30天之后是2020-01-31,不是2020-02-01。如果希望把日期加上一個完整的月(不論月的大小),可以用add_months函數。
從上面的例子可以看出,月有大有小:1)如果下月的天小於本月的天,add_months后取下月的最后一天;2)本月的最后一天加上一個月,就是下個月的最后一天。
3、last_day函數
last_day函數得到日期所屬月份最后一天的時間。
4、其它的日期函數
Oracle還提供了其它的日期計算的函數,如months_between、next_day、numtodsinterval和numtoyminterval等,在我看來,這些函數很煩人,實在沒有意義,就不介紹了。
四、日期環境變量
NLS_DATE_FORMAT環境變量指定日期的輸入和輸入格式,如果字符串的格式與NLS_DATE_FORMAT指定的格式相同,Oracle可以自動轉換,不需要to_char和to_date函數。
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export NLS_DATE_FORMAT="yyyymmddhh24miss"
從上圖的運行結果看出,修改NLS_DATE_FORMAT環境變量后,如果輸入的日期格式不符,Oracle無法識別。
五、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!