ORACLE中的INTERVAL型別

2021-06-09 12:40:14 字數 2999 閱讀 9109

oracle中的interval型別

interval資料型別用來儲存兩個時間戳之間的時間間隔。可以指定years and months,或者days,hours,minuts,seconds之間的間隔。

oracle支援兩種inteval型別,它們分別是year to month和day to second。每個型別都包含leading field和trailing field。主引數定義要被計算的date或者time,副引數定義最小增長量。

下面根據例項來介紹yearto month和day to second。

宣告intervalyear to month的語法是:

其中:1.        'integer[-integer],為leadingfield以及可選的trailing field指定具體的數值。同時month即trailing field的取值範圍是0到11。

2.        percision,即精度,是對leadingfield的數值的最大長度的限制。取值範圍為0-9,預設值是2。

**一:

declare

v_inteval   interval year (3) to month;

begin

v_inteval := interval'123-2' year to month;

dbms_output.put_line(v_inteval);

end;

結果為:+123-02。

說明:表示123年2個月。在這個例子中,必須指定year,即leading field的精度(percision),因為預設值為2,如果將宣告部分修改為:v_inteval interval year to month;會提示精度太小錯誤。另外,需要注意的是,宣告部分需要標註精度,但是賦值部分,即v_inteval := interval '123-2' year to month;不需要標註精度,如果標註,會提示語法錯誤。在本例中,如果精度修改為4,則結果為+0123-02。

**二:

select interval '1234' year(4) from dual;

結果為:+1234-00。

說明:表示2023年0個月。因為interval型別之一,intervalyear to month,宣告時year(leading field)和month(trailing field)必須同時存在,否則會提示錯誤資訊。所以,如果我們單獨引用year或者month時,**二的例子無法編譯通過,只能通過sql語句。

類似的例子還有:

select interval '345' month(3) from dual;

結果為:+28-09。

宣告interval day to second的語法是:

其中:1.        integer指定days的數值,數值不能超過leading_percision。

2.        time_expr指定格式為hh[:mi[:ss[.n]]]ormi[:ss[.n]] or ss[.n]的時間,n是second的小數部分,n的長度不能大於fractional_seconds_precision,並受限於fractional_seconds_precision的位數。如果leadingfield為day,則可以選擇integer time_expr的模式。

3.        leading_precision為leading_field的精度,取值範圍為0-9,預設值為2。

4.        fractional_seconds_precision為秒的精度取值範圍1-9,預設值為6。

5.        hour的取值範圍為0-23,minute的取值範圍為0-59,minute的取值範圍為0-59.999999999。

**一:

declare

v_inteval   interval day (7) to second (5);

begin

v_inteval := interval'4 5:12:10.222' day to second;

dbms_output.put_line (v_inteval);

end;

結果為:++000000405:12:10.22200。

說明:表示4天5小時12分10.222秒。在這個例子中,day以及second的精度都是可選的,類似intervalyear to month,宣告部分需要標註精度,但是賦值部分,不需要標註精度,如果標註,會提示語法錯誤。

**二:

select interval '4 5:12' day to minute from dual;

結果為:+0405:12:00。

說明:表示4天5小時12分0秒。因為inteval型別之一,intervalday to second,宣告時day和second必須同時存在,否則會提示錯誤資訊。所以,如果我們單獨引用year或者month時,**二的例子無法編譯通過,只能通過sql語句。

類似的例子還有:

select interval '400 5' day(3) to hour from dual;

select interval '400' day(3) from dual;

select interval '11:12:10.2222222' hour to second(7) from dual;

select interval '11:20' hour to minute from dual;

select interval '10' hour from dual;

select interval '10:22' minute to second from dual;

select interval '10' minute from dual;

select interval '120' hour(3) from dual;

select interval '30.12345' second(2,4) from dual;(注意,該結果為+00 00:00:30.1235,如果精度為1,3,則結果為+0 00:00:30.123,如果精度為3,7,則結果為+000 00:00:30.1234500)

oracle中的角色

oracle 中的角色 一 何為角色?我在前面的篇幅中說明許可權和使用者。慢慢的在使用中你會發現乙個問題 如果有一組人,他們的所需的許可權是一樣的,當對他們的許可權進行管理的時候會很不方便。因為你要對這組中的每個使用者的許可權都進行管理。有乙個很好的解決辦法就 是 角色。角色是一組許可權的集合,將角...

Oracle中的約束

資料的完整性用於確保資料庫資料遵從一定的商業和邏輯規則,在oracle中,資料完整性可以使用約束 觸發器 應用程式 過程 函式 三種方法來實現,在這三種方法中,因為約束易於維護,並且具有最好的效能,所以作為維護資料完整性的首選。1.約束 約束用於確保資料庫資料滿足特定的商業規則。在oracle中,約...

oracle中的序列

oracle中的序列 sequence 的作用相當與sqlserver中的identify作為乙個表的自動增加且唯一標識的列 下面我就用乙個簡單的序列來實現 1.建立序列 create sequence sq sq宣告乙個序列的名稱 start with 1 宣告序列的開始值 immediate b...