Oracle-23-單行函式之日期函式
一、單行函式之日期函式
1.trunk(x[,y])——對x進行截斷;
2.round(x[,y])——對x進行取整;
3.next_day(x,day)——返回從x開始,一個day的日期;
4.months_between(x,y)——返回x和Y之間的差值;
5.last_day(x)——返回包含該月的最後一天;
6.add_months(x,y)——返回x加上y個月後的結果。
例1:查詢當前系統日期
解:注意sysdate的用法:
注意Oracle預設日期格式:dd-mon-yy;
例2:練習add_months函式
解:在當前系統時間基礎上加1個月:
例3:練習last_day函式
解:last_day(sysdate)即為當前系統時間所在月的最後一天,比如例1得到當前系統時間為06-4月-16,那麼所在月份為4月,最後一天為30日,即30-4月-16。
例4:檢視當前系統所在月的下個月的最後一天。
解:
例5:練習next_day函式
解:
當前系統時間是16年4月6日,那麼next_day(sysdate,5)計算的是16年4月6日所在星期的第5天的日期,所在星期預設從週日(16年4月3日)開始算第1天,則第五天是週四,也就是16年4月7日。
例5:練習moths_between函式
解:計算月份之間的差值
例6:練習round函式
解:
【
(1)round(sysdate,’yyyy’)中的yyyy是按照“年”開始取整;
(2)round如果按照“年”來取整,那麼對於1-6月的“四舍”,7-12月的“五入”,比如16年6月,round取整就是16年1月,如果16年9月,round取整就是17年1月;
(3)round如果按照“月”來取整,那麼對於1-15日的“四舍”,16-31日的“五入”,比如16年6月15日,round取整就是16年6月1日,如果16年6月30日,round取整就是16年7月1日。
例7:練習trunc函式
解:
【trunc函式說明】
(1)trunc(sysdate,’yyyy’)
(2)trunc如果按照“年”來截斷,那麼直接將“月”和“日”全部切掉,改成1月1日,沒有“四捨五入”一說,直接切。比如16年6月1日,trunc截斷就是16年1月1日;
(3)trunc如果按照“月”來截斷,那麼直接將“日”切掉,改成1日,沒有“四捨五入”一說,直接切。比如16年6月15日,trunc截斷就是16年6月1日。
三、單行函式之轉換函式
在寫SQL語句的時候,可能希望一個值從一種資料型別轉換為另一種資料型別,我們就可以用Oracle中的轉換函式來實現,這樣子可以避免編寫程式實現,進一步提高SQL語句的效能和效率。
1.bin_to_num(x)——將x轉換為一個二進位制數;
2.chartorowid(x)——將x轉換為rowid型別,rowid長度為18位;
3.rowidtochar(x)——將rowid x轉換為一個varchar2型別的字元;
4.rowidtonchar(x)——將rowid x轉換為一個nvarchar2型別的字元;
5.to_char(x[, format])——將x轉換為一個varchar2字串,format為
可選引數,用來指定x的格式;
6.to_date(x[, format])——將x轉換為一個DATE。format為可選引數,用來指定x的格式;
7.to_number(x[,format])——將x轉換為一個number。format為可選引數,用來指定x的格式。
例8:練習to_char函式。
解:
注意上圖中的命令。
例9:練習to_date函式
解:如果現在有一個日期表,格式固定,那麼insert into語句在插入資料時候可能出現錯誤,這時候就需要to_date函式格式化日期,然後才能正確插入日期資料。
報錯原因是與系統預設格式不匹配。如果加上自定義格式,如下:
或者就按照系統預設日期格式插入資料,如下: