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...